我正在尝试在我的一个 python 模块中为 main 方法创建一个入口点,并且导入该函数所在的模块似乎有问题。
我的 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 shell 导入它吗?我怀疑 python 路径发生了一些有趣的事情,但我无法诊断出问题。有任何想法吗?
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”)是很奇怪的,但这是我继承的代码,我不想破坏与重命名的向后兼容性,尽管这可能是未来不可避免。如果可能的话,我想暂时保留这些名称。