2024-05-29 10:44:50 发布
网友
我正在尝试打包一个Python应用程序。包脚本在chroot中运行,并调用setup.py(基于setuptools),如下所示:
python setup.py install --root="$pkgdir"
但是,可执行包装器(放置在/usr/bin)以#!.shebang行开始,即用一个点而不是Python解释器的路径
/usr/bin
#!.
为什么会发生这种情况以及如何解决这个问题(不必手动修补生成的脚本)
setuptools尝试使用Python解释器二进制文件来调用它来生成包装器。为了这个目标,它invokes distutils,然后queries ^{}
在某些情况下(例如这种特殊情况),sys.executable可以是空字符串。最可能的原因是打包操作在chroot中运行,这不允许Python访问/proc
sys.executable
chroot
/proc
os.path.normpath('')求值为'.',然后传播回setuptools,最后返回shebang
os.path.normpath('')
'.'
解决方法是使用绝对路径调用Python:
/usr/bin/python setup.py install root="$pkgdir"
Python可以从argv[0]获取自己的路径,从而允许setuptools生成正确的shebang行
argv[0]
setuptools尝试使用Python解释器二进制文件来调用它来生成包装器。为了这个目标,它invokes distutils,然后queries ^{}
在某些情况下(例如这种特殊情况),
sys.executable
可以是空字符串。最可能的原因是打包操作在chroot
中运行,这不允许Python访问/proc
os.path.normpath('')
求值为'.'
,然后传播回setuptools,最后返回shebang解决方法是使用绝对路径调用Python:
Python可以从
argv[0]
获取自己的路径,从而允许setuptools生成正确的shebang行相关问题 更多 >
编程相关推荐