3

当我安装pip(例如使用venv)时,<venv>/bin/pip如下所示:

#!"<venv>/bin/python"

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

它们对应的入口点定义为"pip=pip._internal:main"

当我安装我的app(例如使用venvand pip install -e .)时,<venv>/bin/app如下所示:

#!"<venv>/bin/python"
# EASY-INSTALL-ENTRY-SCRIPT: 'app','console_scripts','app'
__requires__ = 'app'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('app', 'console_scripts', 'app')()
    )

我相应的入口点定义为'app=app:main'.

为什么会有这样的差异?我想避免pkg_resources在生成的脚本中使用与使用相同的方法pip。如何做到这一点?

4

1 回答 1

3

我不得不挖掘 pip 源代码,以便在这里做出有根据的猜测。

当您安装的任何东西通过轮子安装时,就会生成“简单”控制台脚本。因此,您可以通过从包装中制作轮子并安装轮子来确保以这种方式生成它。

于 2018-06-24T10:20:29.400 回答