运行 python 开发环境中的入口点 console_script
Running entry point console_script in python development environment
作为 python 包开发人员,使用入口点的 运行ning 控制台脚本的过程是什么?
我有一个 python 项目有一个 setup.py
。在里面,我有一个
entry_points={
'console_scripts': [
'myscript=mypackage.myscript.__main__:main',
]
},
如果我做 python setup.py develop
,我 做 最终会得到 virtualenv/bin
中的包装器脚本,但是当我 运行 它们时,我得到一个错误:
ImportError: Entry point ('console_scripts', 'myscript') not found
(如果我 pip install .
以上 确实 有效)
现在,从项目的顶部,我可以复制包装器脚本并手动执行:
$ python
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pkg_resources import load_entry_point
>>> load_entry_point('mypackage', 'console_scripts', 'myscript')
<function main at 0x7f7b971bcea0>
>>>
所以,我从这里得到的是 virtualenv/bin/myscript
正在 virtualenv
中查找包,当我 运行 从我的开发环境的顶部手动查找时,它在我的当前目录中查找包。
不过我不想 运行 从我的 virtualenv
中删除它。我不想每次尝试修改我的脚本时都必须执行 pip install .
。
此处预期的工作流程是什么?要手动运行python -m mypackage.myscript
?我宁愿 运行 它就像用户一样。复制 virtualenv/bin 脚本?然后他们可能会过时...
我无法在 setuptools 文档中找到这方面的开发工作流程。
更新:
我在 setup.py develop
:
之后在我的 virtualenv 中找到了这个
$ more virtualenv/lib/python3.6/site-packages/mypackage.egg-link
/home/me/src/mypackage.git
.
按照@Iguananaut 的建议,我改为 运行 pip install -e .
。
现在可以了。
所以我又做了一个 pip uninstall mypackage
并再次做了一个 python setup.py develop
来重现。它没有重现。
我现在明白 load_entry_point
字面意思是从 mypackage.egg-info
读出 entry_points.txt
。我唯一的猜测是那个文件不知何故是坏的......并且没有被 运行ning python setup.py develop
.
修复
所以——我的查询的答案是:
对于开发环境中的 运行ning 控制台脚本,使用 pip install -e .
和 运行 来自 virtualenv/bin/
的脚本。它被设计为以这种方式工作,如果它没有 - 其他地方是错误的。
作为 python 包开发人员,使用入口点的 运行ning 控制台脚本的过程是什么?
我有一个 python 项目有一个 setup.py
。在里面,我有一个
entry_points={
'console_scripts': [
'myscript=mypackage.myscript.__main__:main',
]
},
如果我做 python setup.py develop
,我 做 最终会得到 virtualenv/bin
中的包装器脚本,但是当我 运行 它们时,我得到一个错误:
ImportError: Entry point ('console_scripts', 'myscript') not found
(如果我 pip install .
以上 确实 有效)
现在,从项目的顶部,我可以复制包装器脚本并手动执行:
$ python
Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pkg_resources import load_entry_point
>>> load_entry_point('mypackage', 'console_scripts', 'myscript')
<function main at 0x7f7b971bcea0>
>>>
所以,我从这里得到的是 virtualenv/bin/myscript
正在 virtualenv
中查找包,当我 运行 从我的开发环境的顶部手动查找时,它在我的当前目录中查找包。
不过我不想 运行 从我的 virtualenv
中删除它。我不想每次尝试修改我的脚本时都必须执行 pip install .
。
此处预期的工作流程是什么?要手动运行python -m mypackage.myscript
?我宁愿 运行 它就像用户一样。复制 virtualenv/bin 脚本?然后他们可能会过时...
我无法在 setuptools 文档中找到这方面的开发工作流程。
更新:
我在 setup.py develop
:
$ more virtualenv/lib/python3.6/site-packages/mypackage.egg-link
/home/me/src/mypackage.git
.
按照@Iguananaut 的建议,我改为 运行 pip install -e .
。
现在可以了。
所以我又做了一个 pip uninstall mypackage
并再次做了一个 python setup.py develop
来重现。它没有重现。
我现在明白 load_entry_point
字面意思是从 mypackage.egg-info
读出 entry_points.txt
。我唯一的猜测是那个文件不知何故是坏的......并且没有被 运行ning python setup.py develop
.
所以——我的查询的答案是:
对于开发环境中的 运行ning 控制台脚本,使用 pip install -e .
和 运行 来自 virtualenv/bin/
的脚本。它被设计为以这种方式工作,如果它没有 - 其他地方是错误的。