使用python包在'<packageName>'中收到'找不到'__main__'模块

Ope*_*lex 13 python command-line packaging python-2.7

我正试图在野外发布我的第一个Python包,我成功地在PyPi上设置它并且能够做到pip install.当我尝试通过命令行($ python etlTest)运行包时,我收到以下错误:

/usr/bin/python: can't find '__main__' module in 'etlTest'

当我直接从我的IDE运行代码时,它没有问题.我正在使用Python 2.7并__init__.py在需要时使用脚本.为了让这个工作,我需要做什么?

fam*_*kin 9

我可以轻松地复制您的问题,实际上即使不使用您的包:

$ python empty
.env/bin/python: can't open file 'empty': [Errno 2] No such file or directory
$ mkdir empty
$ python empty
.env/bin/python: can't find '__main__' module in 'empty'
$ python Empty
.env/bin/python: can't find '__main__' module in 'Empty'
Run Code Online (Sandbox Code Playgroud)

所以你根本没有调用你的库,你只是给Python解释器一个不存在的脚本名称,如果在工作目录中有一个类似命名的目录(不区分大小写),它会尝试执行它.

我能够很好地从PyPi安装你的软件包并且可以正确导入它,但似乎没有任何入口点,在顶级导出没有任何有用的东西,并且没有可执行脚本添加到Python bin:

>>> import etltest
>>> dir(etltest)
['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__',
'__path__', '__version__']
Run Code Online (Sandbox Code Playgroud)

直接按照文档中的快速入门中的建议运行etlTest.py 也不起作用:

$ python .env/lib/python2.7/site-packages/etltest/etlTest.py
2014-07-13 17:19:56,831 - settings - DEBUG - Attempting to load .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - WARNING - No such file or directory .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - DEBUG - Attempting to load .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - WARNING - No such file or directory .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - WARNING - Could not find settings file in .env/lib/python2.7/site-packages/.etltest-settings.yml,.env/lib/python2.7/site-packages/.etltest-settings.yml. Using defaults where present.
Traceback (most recent call last):
  File ".env/lib/python2.7/site-packages/etltest/etlTest.py", line 73, in <module>
    main(sys.argv[1:])
  File ".env/lib/python2.7/site-packages/etltest/etlTest.py", line 22, in main
    SettingsManager().first_run_test()
  File ".env/lib/python2.7/site-packages/etltest/utilities/settings_manager.py", line 29, in __init__
    self.app_name = etltest_config['app_name']
KeyError: 'app_name'
Run Code Online (Sandbox Code Playgroud)

我说你的包装不适合分配.您可能希望清理开发环境中的某些依赖项,并阅读setuptools入口点以提供正确的命令行可执行文件以及程序包.如果它不是某种测试版本,它也不应该默认在调试模式下运行.


Lbr*_*BoC 8

最近,我遇到了同样的问题,最终我自己找到了解决方案。因此,正如错误所言,我__main__.py在与相同的路径下添加了一个文件__init__.py

在内部,__main__.py我添加了以下代码:

 from mypackage.mymodule import main 
      main() 
Run Code Online (Sandbox Code Playgroud)

main()是我代码的主要功能。现在就可以了。

这是我的目录:

package 
|__dirpackage
   |_mypackage.py
   |_ __init__.py
   |_ __main__.py
|_setup.py`
Run Code Online (Sandbox Code Playgroud)


小智 5

只需将 __init__.py 文件名称更改为 __main__.py