更改用于打包的console_script入口点解释器

发布于 2021-01-29 17:48:41

我正在使用一个著名的第三方打包系统来打包一些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标记后使用标志或配置更改解释器的路径?

关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以通过设置’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',
          },
      }
    )
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看