找不到 Python 入口点“console_scripts”

Posted

技术标签:

【中文标题】找不到 Python 入口点“console_scripts”【英文标题】:Python Entry point 'console_scripts' not found 【发布时间】:2017-01-09 20:34:30 【问题描述】:

我无法在我的 python 包中导入入口点控制台脚本。寻求帮助调试我当前的问题,因为我已阅读有关该问题的所有相关帖子。

这是我的目录结构:

├── ContentAnalysis
│   ├── __init__.py
│   ├── command_line.py
│   ├── document.py
│   ├── entities.py
│   ├── sentiment.py
│   ├── summary.py
│   ├── text_tokenize.py
│   ├── tokens.py
├── local-requirements.txt
├── requirements.txt
├── server-requirements.txt
├── setup.py
└── tests
    ├── tests.py
    └── tests.pyc

这是我的 setup.py 的样子

from setuptools import setup

config = 
    'description': 'Tools to extract information from web links',
    'author': 'sample',
    'version': '0.1',
    'install_requires': ['nose'],
    'packages': ['ContentAnalysis'],
    'entry_points': 
        'console_scripts': ['content_analysis=ContentAnalysis.command_line:main'],
    ,
    'name':'ContentAnalysis',
    'include_package_data':True


setup(**config)

我已经安装了该软件包并验证了 content_analysis 可以从命令行访问。我还验证了我的 ContentAnalysis 包可以从计算机中任何 cd 的 python 解释器导入。但是我仍然收到“执行时未找到入口点错误”

grant@DevBox2:/opt/content-analysis$ content_analysis -l 'http://101beauty.org/how-to-use-baking-soda-to-reduce-dark-circles-and-bags-under-the-eyes/'
Traceback (most recent call last):
  File "/opt/anaconda2/bin/content_analysis", line 11, in <module>
    load_entry_point('ContentAnalysis==0.1', 'console_scripts', 'content_analysis')()
  File "/opt/anaconda2/lib/python2.7/site-packages/setuptools-26.1.1-py2.7.egg/pkg_resources/__init__.py", line 565, in load_entry_point
  File "/opt/anaconda2/lib/python2.7/site-packages/setuptools-26.1.1-py2.7.egg/pkg_resources/__init__.py", line 2588, in load_entry_point
ImportError: Entry point ('console_scripts', 'content_analysis') not found

感谢任何有关调试的帮助或提示

编辑#1:

尝试调试问题时,我注意到命令行无法作为 ContentAnalysis 中的子模块访问

>>> import ContentAnalysis
>>> ContentAnalysis.tokens
<module 'ContentAnalysis.tokens' from '/opt/anaconda2/lib/python2.7/site-packages/ContentAnalysis/tokens.pyc'>
>>> ContentAnalysis.command_line
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'command_line'
>>> 

似乎没有将 command_line 添加到相关的 site_packages 文件夹中。

grant@DevBox2:/opt/anaconda2/lib/python2.7/site-packages/ContentAnalysis$ ls
data          entities.py   __init__.pyc   summary.py        text_tokenize.pyc
document.py   entities.pyc  sentiment.py   summary.pyc       tokens.py
document.pyc  __init__.py   sentiment.pyc  text_tokenize.py  tokens.pyc

不知道为什么?

【问题讨论】:

可能权限被拒绝 【参考方案1】:

对相关站点包文件夹的调查告诉我,我的python setup.py install 命令没有将所有相关文件放在它们需要的位置。

我仍然不是 100% 的问题的根本原因,但我只能通过传递 setup.py --force 参数来让我的站点包文件夹真正更新

python setup.py install --force

现在我的站点包文件夹包含相关的 command_line.py,并且控制台入口点按预期工作。

【讨论】:

我遇到了完全相同的问题(command_line.py 没有被复制),但python setup.py install --force 没有解决它。您是否了解了有关此问题的更多信息? 另一个潜在的问题是,如果用户运行的是python setup.py install --force,而不是sudo python setup.py install --force。不同的用户可能会有不同的路径变量,您可能会丢失查找脚本所需的路径变量。 ***.com/questions/39255544/… 谢谢。我最终通过使用***解决了这个问题:python setup.py bdist_wheel,然后是pip install .【参考方案2】:

嗯,调试起来有点不透明——我认为入口点的实现可能会受到太多间接的影响。 所以入口点的工作方式如下:

安装带有入口点的脚本时,占位符脚本会放置在您的路径中 此脚本包含您的包的名称和入口点的名称 这用于在名为entry_points.txt 的元数据文件中查找一个条目,该文件位于egg-info 目录或dist-info 目录中

我怀疑这种间接级别允许您在不重新安装二进制入口点的情况下更改入口点,这可能被认为是有利的。

这意味着如果有陈旧或隐藏的dist-infoegg-info 文件可能会导致加载错误的入口点。

快速

strace 2> >(grep --line-buffered entry_points.txt) -e open package

会告诉你正在使用哪个入口点。然后,您可以验证这是否过时/不正确。

【讨论】:

【参考方案3】:

使用--force 并没有解决我的问题。而是我completely uninstalled the package然后又正常安装了。

【讨论】:

【参考方案4】:

在您的配置中尝试更改:'name':'content_analysis'

'console_scripts': ['content_analysis=ContentAnalysis.command_line:main']'name':'content_analysis' 应该是一样的

【讨论】:

你可以有多个入口点,它们不需要匹配“名称”。【参考方案5】:

我在重命名我的 entry_point 后确实遇到了类似的问题,在您的情况下,这将更改 console_scripts 键列表中的 "content_analysis="。使用 python3.6pip19.3.1entry_point 脚本已正确安装在 install_dir/bin/ 目录中,但我无法运行它,它引发了错误。

ImportError: 入口点 ('console_scripts', 'dldemos_server') 不是 找到了

我尝试pip uninstall,但问题仍然存在;

在我的案例中解决问题的是:

    手动删除已安装的每个文件。 install_dir/bin/..中的入口点,install_dir/lib/python3.6/site-packages/...;中的module和egg文件

    安装模块(我做了python3 -m pip install -e . --user,因为我想要开发安装)

然后我就可以运行我的入口点了。

【讨论】:

以上是关于找不到 Python 入口点“console_scripts”的主要内容,如果未能解决你的问题,请参考以下文章

模块qtcore.dll已经加载,但找不到入口点怎么解决

httpd 加载 xDebug 失败:找不到过程入口点

找不到 DLL 入口点

Azure Functions 突然找不到入口点错误

找不到名为“interlockedexchange”的入口点

模块“msvcp110.dll”已加载,但找不到入口点DllRegisterserver。 怎么办