Python不稳定的行为:/ usr / bin / python:没有名为hotspotd.hotspotd的模块

时间:2014-07-12 23:51:40

标签: python linux

我是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有效。怎么回事?

1 个答案:

答案 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)