在Python中的load_entry_point期间找不到模块

llo*_*ett 10 python setuptools entry-point setup.py

我正在尝试在我的一个python模块中为main方法创建一个入口点,并且似乎在导入该函数所在的模块时遇到问题.

我的setup.py看起来像这样:

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

该项目的组织方式如下:

awesome_tool
    |__ awesome_tool.py
    |__ __init__.py
Run Code Online (Sandbox Code Playgroud)

awesome_tool.py包含一个名为main()的函数,我想在一个名为的可执行文件中使用它awesome-tool.执行setup.py时,一切似乎都顺利.我可以启动python提示并执行

> import awesome_tool.awesome_tool
> # (all good here)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从命令行调用时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
Run Code Online (Sandbox Code Playgroud)

什么?我不能从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")()
Run Code Online (Sandbox Code Playgroud)

此外,我意识到让一个包和模块共享相同名称("awesome_tool")是非常奇怪的,但这是我继承的代码,我不想破坏向后重命名的兼容性,尽管这可能是将来不可避免.如果可能的话,我想保留现在的名字.

aba*_*ert 3

看起来您还没有以任何方式安装该软件包,因此您依赖它恰好位于当前工作目录或您添加到的其他目录中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
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了类似的问题,最终结果是我没有真正安装我的软件包。运行“pip install”为我解决了这个问题。 (7认同)