当前位置: 首页 > 知识库问答 >
问题:

更改用于打包的控制台脚本入口点解释器

谢诚
2023-03-14

我正在使用一个著名的第三方打包系统打包一些python包,并且在创建入口点的方式上遇到了一个问题。

当我在我的机器上安装一个切入点时,切入点将包含一个指向任何python解释器的文件,就像这样:

在 /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入口点:

#!/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。

舍邦让这个很不受欢迎。(这肯定不是virtualenv的设计目标;但我只需要让它在这里更便于携带。)

我宁愿不求助于疯狂的查找/xargs/sed命令。(虽然这是我的退路。)

是否有某种方法可以使用setuptools标志或配置更改shebang之后的解释器路径?

共有3个答案

昝宜
2023-03-14

只需更改您的setup.py,以匹配您希望您的入口点使用的python:

#!/bin/custom_python

(我尝试了@damian answer,但不适合我,也许Debian Jessie上的setuptools版本太旧了)

夏侯英纵
2023-03-14

对于希望在运行时执行此操作而不修改设置的用户,供其将来参考。py,可以将解释器路径传递到设置。py构建通过pip与:

$ ./venv/bin/pip install --global-option=build \
--global-option='--executable=/bin/custom_python' .
...
$ head -1 ./venv/bin/some-entry-point
#!/bin/custom_python
郭建华
2023-03-14

您可以通过设置“sys”自定义控制台脚本“shebang行”。可执行文件”(从debian bug报告中了解到这一点)。也就是说。。。

sys.executable = '/bin/custom_python'

setup(
  entry_points={
    'console_scripts': [
       ... etc...
    ]
  }
)

但更好的做法是在构建时包含“execute”参数。。。

setup(
  entry_points={
    'console_scripts': [
       ... etc...
    ]
  },
  options={
      'build_scripts': {
          'executable': '/bin/custom_python',
      },
  }
)
 类似资料:
  • 问题内容: 我正在使用一个著名的第三方打包系统来打包一些python包,并且在创建入口点的方式上遇到了问题。 当我在机器上安装入口点时,入口点将包含一个指向任何python解释器的shebang,如下所示: 在 /home/me/development/test/setup.py中 在 /home/me/.virtualenvs/test/bin/some-entry-point中 : 如您所见,

  • 我在RedHat EC2实例上安装了Minikube v1.3.1以进行一些测试。 由于nginx-ingress-控制器默认使用的端口已经在使用中,我正在尝试在部署中更改它们,但没有结果。有人能建议如何做吗? 如何知道端口已在使用? 当我使用命令kubectl-n kube system get deployment | grep nginx列出系统吊舱时,我得到: nginx入口控制器0/1

  • 如果我在CMD中使用它,它就可以正常工作,但是如果我在gitbash中尝试它,它就不能工作。我喜欢使用GitBash作为我唯一的控制台,但如果它不适用于Python3.4,我就不能这样做。 示例如下图所示。这很容易复制。如果安装了Python和Git,请卸载它们,安装Python3.4,安装Git 2.5.1,您就会得到这个结果。 如何使Python解释器在Git Bash中工作?

  • 本文向大家介绍如何更改控制台的WindowLeft,包括了如何更改控制台的WindowLeft的使用技巧和注意事项,需要的朋友参考一下 使用Console.WindowLeft属性更改C#中控制台的WindowLeft。 示例 现在让我们看一个例子- 输出结果 这将产生以下输出-

  • GCP入口的以下注释等效于什么?我试图使用一个自定义的nginx模板,但我找不到以下注释的参考。在github的回答中,他们使用的是AWS,但我需要使用GCP来实现这一点。 我正在使用ingress类nginx 我正在尝试使用入口控制器在GCP Kubernetes集群中进行入口TCP SSL终止。 我想要来自<代码>https://example.com:1234重定向到

  • 我们正在GKE(谷歌kubernetes引擎)上运行一个API服务器。我们使用Google云endpoint和API密钥处理授权。我们将每个API密钥上的某些IP地址列为白名单。为了做到这一点,我们必须将负载平衡器转换为入口控制器,以公开我们的API服务器。IP白名单不适用于loadbalancer服务。现在,我们有一个类似以下内容的入口设置: