модуль не найдена в точка входа нагрузки в 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