Получен модуль "__main__" в "<имя_пакета>" с пакетом python.

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

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

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

4 ответа

Решение

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

$ 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__']

Непосредственный запуск etlTest.py, как предлагается в Quickstart из ваших документов, также не работает:

$ 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 точки входа, чтобы обеспечить правильные исполняемые файлы командной строки вместе с вашим пакетом. Также он не должен работать в режиме отладки по умолчанию, если это не тестовый выпуск.

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

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

 from mypackage.mymodule import main 
      main() 

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

вот мой каталог:

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

Просто измените имя файла __init__.py на __main__.py

У меня была такая же проблема, и я решил ее, убедившись, что нахожусь в правильном каталоге пакета, который вы пытаетесь запустить.

Для Windows введите dir в консоли, а в Linux / macOS - ls чтобы увидеть ваш текущий каталог

Другие вопросы по тегам