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

时间:2014-07-13 14:10:43

标签: python python-2.7 command-line packaging

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

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

当我直接从我的IDE运行代码时,它没有问题。我使用的是Python 2.7,并且在需要时有__init__.py个脚本。我需要做些什么来实现这个目标?

4 个答案:

答案 0 :(得分: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'

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

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

>>> import etltest
>>> dir(etltest)
['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__',
'__path__', '__version__']

按照Quickstart from your docs中的建议直接运行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'

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

答案 1 :(得分:5)

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

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

 from mypackage.mymodule import main 
      main() 

main()是我的代码的主要功能。它现在正在运作。

这是我的目录:

package 
|__dirpackage
   |_mypackage.py
   |_ __init__.py
   |_ __main__.py
|_setup.py`

答案 2 :(得分:1)

我遇到了同样的问题,并通过确保我位于您尝试运行的包的正确目录中来解决它。

对于 Windows,在控制台中输入 ::ng-deep .mat-slider-thumb { transform: scale(0.7) !important; } ,而在 Linux/macOS 中 - dir 以查看您的当前目录

答案 3 :(得分:0)

只需将名称__init__.py文件更改为__main __。py