модуль не найдена в точка входа нагрузки в Python

Я пытаюсь создать точку входа для основного метода в одном из моих модулей python, и, похоже, возникают проблемы с импортом модуля, где эта функция живет.

мой setup.py выглядит так:

...
setup(name="awesome-tool",
      ...,
      entry_points={
          'console_scripts' : [
              'awesome-tool = awesome_tool.awesome_tool:main'
          ]
      }
)

проект организован следующим образом:

awesome_tool
    |__ awesome_tool.py
    |__ __init__.py

это awesome_tool.py который содержит функцию main (), которую я хочу сделать доступной в исполняемом файле с именем awesome-tool. При выполнении setup.py кажется, все идет хорошо. Я могу начать python подскажите и сделайте

> import awesome_tool.awesome_tool
> # (all good here)

но когда я пытаюсь вызвать awesome-tool из командной строки происходит следующее:

Traceback (most recent call last):
  File ".../virtualenvs/awesome-tool/bin/awesome-tool", line 9, in <module>
    load_entry_point('awesome-tool==1.1.0', 'console_scripts', 'awesome-tool')()
  File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "build/bdist.macosx-10.9-intel/egg/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named awesome_tool.awesome_tool

что? Разве я не мог просто импортировать это из оболочки python? Я подозреваю, что с Python path происходит что-то забавное, но я не смог диагностировать проблему. Есть идеи?

проблемные строки awesome-tool исполняемый предусмотренных setup.py кажется, следующий:

from pkg_resources import load_entry_point
load_entry_point("awesome-tool==1.1.0", "console_scripts", "awesome-tool")()

кроме того, я понимаю, что очень странно иметь одно и то же имя пакета и модуля ("awesome_tool"), но это код, который я унаследовал, и я не хочу нарушать обратную совместимость с переименованием, хотя это может быть неизбежно в будущем. Если возможно, я хотел бы сохранить имена такими, какие они есть сейчас.

1 ответов


похоже, что вы никак не установили пакет, поэтому вы полагаетесь на то, что он будет находиться в текущем рабочем каталоге или в каком-либо другом каталоге, который вы добавили в sys.path.

вы не сказали нам, как вы " призываете awesome-tool из командной строки," но я думаю, что вы делаете это из другого рабочего каталога.

например:

$ cd ~/virtualenvs/awesome-tool
$ python
>>> import awesometool.awesometool
>>> ^D
$ cd ..
$ python
>>> import awesometool.awesometool
ImportError: No module named awesome_tool.awesome_tool
$ cd awesome-tool
$ python ./bin/awesome-tool
<everything works>
$ cd bin
$ python awesome-tool
ImportError: No module named awesome_tool.awesome_tool