我正在尝试打包一个 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/