我正在尝试打包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行。

10-01 11:24
查看更多