当前位置: 首页 > 面试题库 >

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

黄宏毅
2023-03-14
问题内容

我正在使用一个著名的第三方打包系统来打包一些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',
      },
  }
)


 类似资料:
  • 我正在使用一个著名的第三方打包系统打包一些python包,并且在创建入口点的方式上遇到了一个问题。 当我在我的机器上安装一个切入点时,切入点将包含一个指向任何python解释器的文件,就像这样: 在 /home/me/development/test/setup.py 在/home/me/中。virtualenvs/test/bin/some入口点: 如您所见,切入点样板包含一个硬编码的Pytho

  • 我正在编写Webpack插件,我需要执行相同的技巧,以便在应用程序之前注入。 它将包的入口点更改为某个自定义函数,该函数需要,然后加载原始入口应用程序。 包中的片段 我找不到做这件事的代码,有什么指示吗?

  • 问题内容: 我要呼吁汇率第三方API,但JSON返回不断变化,如果我申请到的转换,它将返回我:,所以如果我的要求来,它将返回我。 我将不得不使用将返回的结果映射到pojo中,是否有任何可行的方法? 我当前的硬编码解决方法: 问题答案: 是具有值的字段的对象。 否是with键/值对。 两者都是正确的,但是由于before的值是动态的(变化的),因此它是您需要的第二种解释。 因此,请勿要求将JSON转

  • 问题内容: 如何编写适用于方法执行的AspectJ切入点,该方法执行会使用注释覆盖接口方法?例如: 仅当带有注释本身时,切入点才匹配。还有另一种方法吗? 问题答案: 正如Nicholas指出的那样,这在AspectJ中是不可能的。这是无法实现的更多证据(摘自http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-

  • 我正在运行一个12节点jvm ignite集群。e每个jvm都运行在自己的vmware节点上。我正在使用zookeeper使用tcp发现来保持这些ignite节点的同步。我在zookeeper日志中看到了很多节点故障,尽管java进程正在运行,但我不知道为什么有些ignite节点会带着“node Failed”类型的错误离开集群。Vmware使用vmotion来执行他们所谓的“迁移”,我假设这是V

  • 在oh-my-zsh文件中,我通过更改. zshrc文件中的行来添加nvm。 插件=(git nvm)//添加了nvm 现在我看到了nvm,并在终端上使用它 但是当我改变下面看到的版本。 然后我关闭终端,打开一个新的,检查版本,它仍然显示使用以前的版本!它没有保持变化。 新窗口