Python异常行为:/usr/bin/python:没有名为hotspotd.hotspotd的模块
我刚开始学习Python,最近创建了我的第一个开源Python项目——一个守护进程,可以在Linux上创建WiFi热点。
我使用了distutils来构建这个包。安装完成后,我注册了下面的脚本,这个脚本简单地通过调用相应的Python模块来启动守护进程:
#!/bin/bash
python -m hotspotd $*
这是注册它的setup.py文件:
#INSTALL IT
from distutils.core import setup
s = setup(name='hotspotd',
version='0.1',
description='Small daemon to create a wifi hotspot on linux',
license='MIT',
author='Prahlad Yeri',
author_email='prahladyeri@yahoo.com',
url='https://github.com/prahladyeri/hotspotd',
#py_modules=['hotspotd','cli'],
packages=['hotspotd'],
package_dir={'hotspotd': ''},
package_data={'hotspotd': ['run.dat']},
scripts=['hotspotd']
#data_files=[('config',['run.dat'])],
)
现在,这在我的电脑和我测试过的一些其他电脑上都能正常工作。不过,正如GitHub上提到的开放问题,有些用户无法运行这个脚本。他们遇到了这个错误:
No module named hotspotd.main; 'hotspotd' is a package and cannot be directly executed
显然,它期望使用完整的package.module语法,在他们的环境中是hotspotd.hotspotd
。但是在我的电脑上,完整的语法不管用,只有hotspotd
能工作。这是怎么回事呢?
1 个回答
0
我需要修改我的脚本,不再直接把模块作为参数传递,而是在脚本里导入这个模块,然后从那里调用 hotspotd.main
函数:
#!/usr/bin/env python
#@author: Prahlad Yeri
#@description: Small daemon to create a wifi hotspot on linux
#@license: MIT
#python -m hotspotd $*
import hotspotd.main
import sys
import os
import argparse
if __name__ == "__main__":
#check root or not
if os.getenv('USER') != 'root':
print "You need root permissions to do this, sloth!"
sys.exit(1)
parser = argparse.ArgumentParser(description='A small daemon to create a wifi hotspot on linux')
parser.add_argument('-v', '--verbose', required=False, action='store_true')
parser.add_argument('command', choices=['start', 'stop', 'configure'])
args = parser.parse_args()
hotspotd.main.main(args)