Python 入口点 'console_scripts' 未找到
Python Entry point 'console_scripts' not found
我无法在我的 python 包中导入入口点控制台脚本。寻求帮助调试我当前的问题,因为我已经阅读了关于该问题的所有相关 post。
这是我的目录结构:
├── 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 解释器导入。但是我仍然得到 "Entry point not found error on execution"
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
我想知道为什么?
对相关站点包文件夹的调查让我发现我的 python setup.py install
命令没有将所有相关文件放在它们需要的位置。
我仍然不是问题根本原因的 100%,但我只能通过传递 setup.py --force
参数来让我的站点包文件夹真正更新在
python setup.py install --force
现在我的 site-packages 文件夹包含相关的 command_line.py,并且控制台入口点按预期工作。
嗯,这对调试来说有点不透明——我认为入口点的实现可能会受到太多间接的影响。
因此入口点的工作方式如下:
- 安装带有入口点的脚本时,会在您的路径上放置一个占位符脚本
- 此脚本包含您的包的名称和入口点的名称
- 这用于在名为
entry_points.txt
的元数据文件中查找条目,该文件位于 egg-info
目录或 dist-info
目录中
我怀疑这种间接级别允许您在不重新安装二进制入口点的情况下更改入口点指向的位置,这可能被认为是有利的。
这意味着如果存在陈旧或阴影 dist-info
或 egg-info
文件,可能会导致加载错误的入口点。
快点
strace 2> >(grep --line-buffered entry_points.txt) -e open package
会告诉您正在使用哪个入口点。然后您可以验证这是否过时/不正确。
使用--force
并没有解决我的问题。相反,我completely uninstalled the package然后又正常安装了。
在您的配置中尝试更改:'name':'content_analysis'
'console_scripts': ['content_analysis=ContentAnalysis.command_line:main']
和 'name':'content_analysis'
应该相同
在重命名我的 entry_point 后,我确实遇到了类似的问题,在你的情况下,"content_analysis="
在 console_scripts键。使用 python3.6, pip19.3.1, entry_point 脚本已正确安装在 install_dir/bin/
目录中,但我无法 运行 它,它引发了以下错误。
ImportError: Entry point ('console_scripts', 'dldemos_server') not
found
我试过pip uninstall
,但问题依然存在;
解决我的问题的方法是:
手动删除已安装的每个文件。 install_dir/bin/..
中的入口点,以及install_dir/lib/python3.6/site-packages/...;
中的模块和egg文件
安装模块(我做了 python3 -m pip install -e . --user
因为我想要开发安装)
然后我就可以 运行 我的切入点了。
我无法在我的 python 包中导入入口点控制台脚本。寻求帮助调试我当前的问题,因为我已经阅读了关于该问题的所有相关 post。
这是我的目录结构:
├── 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 解释器导入。但是我仍然得到 "Entry point not found error on execution"
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
我想知道为什么?
对相关站点包文件夹的调查让我发现我的 python setup.py install
命令没有将所有相关文件放在它们需要的位置。
我仍然不是问题根本原因的 100%,但我只能通过传递 setup.py --force
参数来让我的站点包文件夹真正更新在
python setup.py install --force
现在我的 site-packages 文件夹包含相关的 command_line.py,并且控制台入口点按预期工作。
嗯,这对调试来说有点不透明——我认为入口点的实现可能会受到太多间接的影响。 因此入口点的工作方式如下:
- 安装带有入口点的脚本时,会在您的路径上放置一个占位符脚本
- 此脚本包含您的包的名称和入口点的名称
- 这用于在名为
entry_points.txt
的元数据文件中查找条目,该文件位于egg-info
目录或dist-info
目录中
我怀疑这种间接级别允许您在不重新安装二进制入口点的情况下更改入口点指向的位置,这可能被认为是有利的。
这意味着如果存在陈旧或阴影 dist-info
或 egg-info
文件,可能会导致加载错误的入口点。
快点
strace 2> >(grep --line-buffered entry_points.txt) -e open package
会告诉您正在使用哪个入口点。然后您可以验证这是否过时/不正确。
使用--force
并没有解决我的问题。相反,我completely uninstalled the package然后又正常安装了。
在您的配置中尝试更改:'name':'content_analysis'
'console_scripts': ['content_analysis=ContentAnalysis.command_line:main']
和 'name':'content_analysis'
应该相同
在重命名我的 entry_point 后,我确实遇到了类似的问题,在你的情况下,"content_analysis="
在 console_scripts键。使用 python3.6, pip19.3.1, entry_point 脚本已正确安装在 install_dir/bin/
目录中,但我无法 运行 它,它引发了以下错误。
ImportError: Entry point ('console_scripts', 'dldemos_server') not found
我试过pip uninstall
,但问题依然存在;
解决我的问题的方法是:
手动删除已安装的每个文件。
install_dir/bin/..
中的入口点,以及install_dir/lib/python3.6/site-packages/...;
中的模块和egg文件安装模块(我做了
python3 -m pip install -e . --user
因为我想要开发安装)
然后我就可以 运行 我的切入点了。