Received 'не может найти модуль __main__' в '<packageName>' с пакетом python

Я пытаюсь выпустить мой первый пакет Python в дикой природе, и мне удалось настроить его на PyPi и сделать pip install. Когда я пытаюсь запустить пакет через командную строку ($ python etlTest), я получаю следующую ошибку:

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

Когда я запускаю код непосредственно из своей IDE, он работает без проблем. Я использую Python 2.7 и имею __init__.py скрипты там, где это необходимо. Что мне нужно сделать, чтобы это работало?

Ответ 1

Я могу легко реплицировать вашу проблему, даже без использования вашего пакета:

$ 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 несуществующее имя script, которое в случае, если в рабочем каталоге он похож на именованный каталог (без учета регистра) выполните его.

Мне удалось установить пакет из PyPi как можно точнее и можно импортировать его в порядке, но, похоже, нет никакой точки входа в него, ничего полезного не экспортируется на верхнем уровне, и в Python не добавляются исполняемые скрипты бен:

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

Запуск 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'

Я бы сказал, что ваш пакет еще не подходит для ditribution. Возможно, вам захочется очистить некоторые зависимости от среды разработки и прочитать пункты ввода Setuptools, чтобы обеспечить правильные исполняемые файлы командной строки вместе с вашим пакетом. Также он не должен запускаться в режиме отладки по умолчанию, если это не какой-то тестовый выпуск.

Ответ 2

Недавно я получил ту же проблему и окончательно нашел решение самостоятельно. Так как ошибка сказала, я добавил файл __main__.py по тому же пути, что и мой __init__.py.

Внутри __main__.py Я добавил следующий код:

 from mypackage.mymodule import main 
      main() 

main() была основной функцией моего кода. И теперь это работает.

здесь моя директория:

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