我是python的新手,刚创建了我的第一个opensource python项目 - 一个daemon来创建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
有效。怎么回事?
答案 0 :(得分: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)