【问题标题】:setup.py generates /usr/bin wrappers with a "#!." shebangsetup.py 生成带有“#!”的 /usr/bin 包装器。社邦
【发布时间】:2019-04-02 23:48:04
【问题描述】:

我正在尝试打包 Python 应用程序。包脚本在 chroot 中运行,并调用 setup.py(基于 setuptools),如下所示:

python setup.py install --root="$pkgdir"

但是,可执行包装器(将放置在 /usr/bin 中)以 #!. shebang 行开头,即使用点而不是 Python 解释器的路径。

为什么会发生这种情况以及如何解决这个问题(无需手动修补生成的脚本)?

【问题讨论】:

    标签: python setuptools


    【解决方案1】:

    setuptools 尝试使用用于调用它的 Python 解释器二进制文件来生成其包装器。为了这个目标,它invokes distutils,然后queries sys.executable

    在某些情况下(例如这种特殊情况),sys.executable 可以是空字符串。最可能的原因是打包操作运行在chroot,不允许Python访问/proc

    os.path.normpath('') 计算结果为 '.',然后一直传播回 setuptools,并以 shebang 结尾。

    解决方法是使用绝对路径调用 Python:

    /usr/bin/python setup.py install --root="$pkgdir"
    

    然后,Python 可以从 argv[0] 获取自己的路径,从而允许 setuptools 生成正确的 shebang 行。

    【讨论】:

    • 在 bash 中,您可以使用`which python` setup.py install 等方法将默认 Python 的完整路径替换为命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2017-02-07
    • 1970-01-01
    • 2023-03-05
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多