python - setup.py 生成/usr/bin 包装器,带有 "#!."shebang

标签 python setuptools

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

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

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

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

最佳答案

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 线。

关于python - setup.py 生成/usr/bin 包装器,带有 "#!."shebang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55485061/

相关文章:

Python setuptools 从命令行覆盖版本

python - igraph(最大)生成树断开连接

Python:根据项目和外部键对列表进行排序

python - 操作 numpy 数组

django - pip 安装错误: setup script specifies an absolute path

python - setuptools、easy_install 和自定义 pypi 服务器

python - 为什么 setuptools 不复制我的文件,而 distutils 却复制?

python - Pandas QuarterBegin() : Possible Bug when calculating First of quarter

Python Django - 通过 ListView 更新 booleanField

python - 设置、测试和安装 Python 库的依赖项(要求)