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