没有 'pkg_resources' 的入口点和控制台脚本?
Entry Points and Console Scripts Without 'pkg_resources'?
当我安装 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
时(例如 venv
和 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
一样。如何实现?
我必须深入研究 pip 源代码才能在这里做出有根据的猜测。
当您安装的任何东西都是通过轮子安装时,会生成 "simple" 控制台脚本。所以你可以通过从你的包中制作一个轮子并安装轮子来确保它是以这种方式生成的。
当我安装 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
时(例如 venv
和 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
一样。如何实现?
我必须深入研究 pip 源代码才能在这里做出有根据的猜测。
当您安装的任何东西都是通过轮子安装时,会生成 "simple" 控制台脚本。所以你可以通过从你的包中制作一个轮子并安装轮子来确保它是以这种方式生成的。