我正在尝试打包Python应用程序。程序包脚本在chroot中运行,并按如下所示调用setup.py(基于setuptools):
python setup.py install --root="$pkgdir"
但是,可执行文件包装程序(将放置在/usr/bin
中)以#!.
shebang行开头,即以点而不是Python解释器的路径。
为什么会发生这种情况以及如何解决此问题(无需手动修补生成的脚本)?
答案 0 :(得分: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行。