更改用于打包的console_script入口点解释器
我正在使用一个著名的第三方打包系统来打包一些python包,并且在创建入口点的方式上遇到了问题。
当我在机器上安装入口点时,入口点将包含一个指向任何python解释器的shebang,如下所示:
在 /home/me/development/test/setup.py中
from setuptools import setup
setup(
entry_points={
"console_scripts": [
'some-entry-point = test:main',
]
}
)
在 /home/me/.virtualenvs/test/bin/some-entry-point中 :
#!/home/me/.virtualenvs/test/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'test==1.0.0','console_scripts','some-entry-point'
__requires__ = 'test==1.0.0'
import sys
from pkg_resources import load_entry_point
sys.exit(
load_entry_point('test==1.0.0', 'console_scripts', 'some-entry-point')()
)
如您所见,入口点样板包含指向python解释器的硬编码路径,该路径位于我用于创建第三方程序包的虚拟环境中。
使用我的第三方打包系统安装此入口点将导致在计算机上安装该入口点。但是,使用目标计算机上不存在的对python解释器的硬编码引用,用户必须运行python
/path/to/some-entry-point
。
shebang使得它非常难携带。(当然,这不是virtualenv的设计目标;但是我只需要在此处使其更具可移植性即可。)
我宁愿不求助于疯狂的find / xargs / sed命令。(尽管那是我的后备。)
有什么办法可以在setuptools
标记后使用标志或配置更改解释器的路径?
-
您可以通过设置’sys.executable’来自定义console_scripts的shebang行(从debian错误报告中了解到)。也就是说…
sys.executable = '/bin/custom_python' setup( entry_points={ 'console_scripts': [ ... etc... ] } )
更好的做法是在构建时包括“执行”参数。
setup( entry_points={ 'console_scripts': [ ... etc... ] }, options={ 'build_scripts': { 'executable': '/bin/custom_python', }, } )