运行 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/ 的脚本。它被设计为以这种方式工作,如果它没有 - 其他地方是错误的。