【发布时间】:2019-02-27 21:52:35
【问题描述】:
我有一些 Python 脚本,现在由各种各样的人跨多个测试平台运行。这造成了两个问题:
- python3 路径在所有测试人员中都不相同,并且
- 并非所有运行脚本的人都在 $PATH 中设置了 Python 路径。
因为 (1) 我无法对 shebang 进行硬编码,因为它依赖于测试器,并且因为 (2) #!/usr/bin/env python3 如果放在 Python 文件的顶部,则不能保证工作。
我知道 python3 解释器将位于测试人员的少数几个位置之一。所以我想知道的是,是否有可能将 Python 文件顶部的 #!/usr/bin/env python3 替换为对查找 python 的 bash shell 脚本的调用位置然后为脚本“设置”它?如果这不可能,那么剩下的就是没有意义的。
我创建了一个 bash 脚本,它会查看可能的位置,直到找到解释器,但我不知道如何将它返回到 Python 文件的顶部。
例如,我创建了一个基本的python文件(shebang.py)
#!./pyshebang.sh
print("Hello World")
pyshebang.sh 做了两件事,它将找到的 python 路径附加到 PATH,并将该路径回显给解释器。如果我运行上面的 python 脚本,stdout 会从 bash 脚本中获取回显,而不是从 python 脚本中获取打印。
【问题讨论】:
-
不是真的;但知道正确解释器的位置不是您脚本的工作(或者至少不是您的 工作,作为脚本的作者)。这就是 installer 的工作,
python setup.py ...用安装程序指定的路径替换任何包含单词python(#!python是最小示例)的 shebang。 -
值得注意的是,
/usr/bin/env python3不仅仅是回显 bash 的路径。如果您直接在命令行上键入/usr/bin/env python3,您会看到它实际上是启动 python(很可能是通过exec()的某种形式)。所以大概你的脚本在调用时必须做同样的事情。 -
使您的用例通用。我相信应该让用户了解他们的 python 路径在哪里。
-
阅读您的
execve手册页:您不能将脚本作为 shebang。 -
我建议一种策略是告诉您的用户 PATH 中的 python3 是运行您的程序所必需的。
标签: python python-3.x bash