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

2024-05-29 10:44:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但是,可执行包装器(放置在/usr/bin)以#!.shebang行开始,即用一个点而不是Python解释器的路径

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


Tags: installpy路径脚本应用程序binusrsetup
1条回答
网友
1楼 · 发布于 2024-05-29 10:44:50

setuptools尝试使用Python解释器二进制文件来调用它来生成包装器。为了这个目标,它invokes distutils,然后queries ^{}

在某些情况下(例如这种特殊情况),sys.executable可以是空字符串。最可能的原因是打包操作在chroot中运行,这不允许Python访问/proc

os.path.normpath('')求值为'.',然后传播回setuptools,最后返回shebang

解决方法是使用绝对路径调用Python:

/usr/bin/python setup.py install  root="$pkgdir"

Python可以从argv[0]获取自己的路径,从而允许setuptools生成正确的shebang行

相关问题 更多 >

    热门问题