未找到Python入口点'console_scripts'

时间:2016-09-01 20:25:22

标签: python debian anaconda setuptools setup.py

我无法在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软件包可以从python解释器从计算机中的任何CD导入。然而,我仍然得到“执行时未找到入口点错误”

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:

尝试调试此问题,我注意到command_line无法作为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

我想知道为什么?

5 个答案:

答案 0 :(得分:2)

调查相关的site-packages文件夹让我觉得我的height命令并未将所有相关文件放在需要的位置。

我仍然不是100%的问题的根本原因,但我只能通过传递setup.py中的python setup.py install参数来使我的site-packages文件夹真正更新,如

--force

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

答案 1 :(得分:1)

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

ImportError:入口点(“ console_scripts”,“ dldemos_server”)不存在 找到

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

解决我的问题的方法是:

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

    中的模块和egg文件
  2. 安装模块(我做了python3 -m pip install -e . --user,因为我想进行开发安装)

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

答案 2 :(得分:0)

嗯,这对调试来说有点不透明 - 我认为入口点的实现可能会受到太多间接的影响。 所以入口点的工作原理如下:

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

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

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

快速

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

将告诉您正在使用哪个入口点。然后,您可以验证这是否陈旧/不正确。

答案 3 :(得分:0)

使用www.example.com/blog并没有为我解决问题。相反,我completely uninstalled the package然后再正常安装它。

答案 4 :(得分:0)

在您的配置中尝试更改:function superhero(target) { target.isSuperhero = true target.power = 'flight' } @superhero class MySuperHero { } console.log(MySuperHero.power) // It should show "flight" but its showing undefined in console

'name':'content_analysis''console_scripts': ['content_analysis=ContentAnalysis.command_line:main']应该相同