gpt4 book ai didi

python - 强大的Python3 shebang线?

转载 作者:行者123 更新时间:2023-12-03 22:20:17 29 4
gpt4 key购买 nike

有没有办法编写 shebang 行,以便它可以找到 Python3 解释器(如果存在)?

天真,来自 PEP 394我希望 #!/usr/bin/env python3应该管用。

但是,我注意到在某些系统上 python是 Python3,他们不提供 python3别名。在这些系统上,您需要使用 #!/usr/bin/env python得到Python3。

有没有一种强有力的方法来处理这种歧义?有什么方法可以编写shebang行,使其使用python3如果存在,请尝试 python如果不? (要求最终用户手动修复他们的系统以添加 python3 别名并不理想。)

最佳答案

我能看到的唯一方法是提供您自己的shebang包装器来调用正确版本的python。如果您可以可靠地将包装器放置在设定的位置,您可以执行以下操作:

创建包装脚本,例如/usr/local/bin/python3_wrapper

#!/bin/bash
cmd="$1"
shift
if which python3 >/dev/null; then
exec python3 "$cmd" "$@"
elif which python >/dev/null; then
version=$(python --version 2>&1 | cut -d' ' -f2 | cut -d. -f1)
if [[ "$version" == "3" ]]; then
exec python "$cmd" "$@"
else
echo "python is version $version (python3 not found)"
fi
else
echo "python3 nor python found"
fi
exit 1

然后在脚本中使用以下shebang:
#!/usr/local/bin/python3_wrapper

您的另一个选择是调用一个适用于版本 2 和版本 3 的 python 脚本,然后使用正确的可执行文件调用您的 python3 脚本。如果您的脚本名为 script.py,则将其重命名为 script.py3 并按如下方式创建 script.py:
#!/usr/bin/env python

import os
import sys

if sys.version_info.major == 3:
exe = "python" # python is version 3.x
else:
exe = "python3" # python is not version 3.x so try python3
try:
os.execvp(exe, [exe, sys.argv[0]+'3'] + sys.argv[1:])
except:
print(exe, "not found")
sys.exit(1)

关于python - 强大的Python3 shebang线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708438/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com