Python异常行为:/usr/bin/python:没有名为hotspotd.hotspotd的模块

0 投票
1 回答
991 浏览
提问于 2025-04-18 13:05

我刚开始学习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)

撰写回答