setup.py生成带有“#!”的/ usr / bin包装器。舍邦

时间:2019-04-02 23:48:05

标签: python setuptools

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

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

但是,可执行文件包装程序(将放置在/usr/bin中)以#!. shebang行开头,即以点而不是Python解释器的路径。

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

1 个答案:

答案 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行。