在python开发环境中运行入口点console_script

rra*_*nza 5 python setuptools python-3.x

作为 python 包开发人员,运行使用入口点的控制台脚本的过程是什么?

我有一个带有 with 的 python 项目setup.py。其中,我有一个

 entry_points={
        'console_scripts': [
            'myscript=mypackage.myscript.__main__:main',
        ]
    },
Run Code Online (Sandbox Code Playgroud)

如果我这样做python setup.py develop,我最终得到 中的包装器脚本virtualenv/bin,但是当我运行它们时,我会收到错误:

ImportError:找不到入口点('console_scripts','myscript')

(如果我这样做,上面的方法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>
>>> 
Run Code Online (Sandbox Code Playgroud)

因此,我从中得到的是virtualenv/bin/myscriptvirtualenv包中查找,当我从开发环境顶部手动运行它时,它会在当前目录中查找包。

但我不想把它耗尽virtualenv。我不想pip install .每次想尝试修改脚本时都必须这样做。

这里的预期工作流程是什么?要手动运行python -m mypackage.myscript?我宁愿像用户一样运行它。复制 virtualenv/bin 脚本?那么它们可能就会过时......

我无法在 setuptools 文档中找到开发工作流程的这方面。

更新:

我确实在我的 virtualenv 中找到了这个setup.py develop

$ more virtualenv/lib/python3.6/site-packages/mypackage.egg-link
/home/me/src/mypackage.git
.
Run Code Online (Sandbox Code Playgroud)

rra*_*nza 8

按照@Iguananaut 的建议,我pip install -e .改为跑步。

现在可以了。

所以我然后做了一个pip uninstall mypackagepython setup.py develop再次做了一个来重现。它没有重现。

我现在明白了,从字面上load_entry_point读取。我唯一的猜测是,不知何故该文件是坏的......并且没有通过运行来修复。entry_points.txtmypackage.egg-infopython setup.py develop

所以——我的问题的答案是:

要在开发环境中运行控制台脚本,请使用pip install -e .并运行virtualenv/bin/. 它的设计初衷就是以这种方式工作,如果不这样,那就是其他地方出了问题。