Python部署和/ usr / bin / env可移植性
在我所有的可执行Python脚本的开始处,我放置了shebang行:
#!/usr/bin/env python
我在env python
产生Python 2.2环境的系统上运行这些脚本。 我的脚本很快失败,因为我对兼容的Python版本进行了手动检查:
if sys.version_info < (2, 4):
raise ImportError("Cannot run with Python version < 2.4")
如果可能的话,我不想在每个可执行文件上更改shebang行; 但是,我没有对机器的管理访问权限来更改env python
的结果,我不想强制某个特定版本,如下所示:
#!/usr/bin/env python2.4
我想避免这种情况,因为系统可能具有比Python 2.4更新的版本,或者可能有Python 2.5,但没有Python 2.4。
什么是优雅的解决方案?
[编辑:]我在提出这个问题时没有足够具体 - 我想让用户在不进行手动配置的情况下执行脚本(例如在~/bin
修改路径或符号链接,并确保PATH在Python之前有~/bin
2.2路径)。 也许需要一些分配工具来防止手动调整?
“env”只是执行它在PATH env var中找到的第一件事。 要切换到不同的python,请在调用脚本之前将该python可执行文件的目录前置到路径中。
相当恶心的解决方案 - 如果你的检查失败,使用这个函数(可能会有很大的改进)来确定可用的最佳解释器,确定它是否可以接受,如果是这样的话,请使用os.system或类似的东西和你的sys重新启动你的脚本。 argv使用新的解释器。
import os
import glob
def best_python():
plist = []
for i in os.getenv("PATH").split(":"):
for j in glob.glob(os.path.join(i, "python2.[0-9]")):
plist.append(os.path.join(i, j))
plist.sort()
plist.reverse()
if len(plist) == 0: return None
return plist[0]
如果您正在运行脚本,则可以将PATH变量设置为首先指向一个专用bin目录:
$ mkdir ~/bin
$ ln -s `which python2.4` ~/bin/python
$ export PATH=~/bin:$PATH
然后当你执行你的python脚本时,它会使用python 2.4。 您必须更改登录脚本才能更改PATH。
或者用你想要的显式解释器运行你的python脚本:
$ /path/to/python2.4 <your script>
链接地址: http://www.djcxy.com/p/46403.html
上一篇: Python deployment and /usr/bin/env portability
下一篇: Is there a way to change effective process name in Python?