如何临时将Python默认版本切换至2.7,确保多脚本兼容运行?
这个问题我之前帮朋友处理过,核心就是主脚本指定了Python2,但它调用的子脚本还是默认走了系统的Python3。给你几个靠谱的解决办法,按实用性排序:
修改子脚本的Shebang头(最直接的方法)
打开每个被主脚本调用的.py文件,把开头的#!/usr/bin/env python改成#!/usr/bin/env python2(如果系统里能识别python2命令的话),或者直接写Python2.7的绝对路径,比如#!/usr/bin/python2.7。这样不管是主脚本调用还是直接执行,子脚本都会自动用Python2.7运行。调整主脚本里的调用命令
如果主脚本是通过subprocess、os.system这类方法调用子脚本的,检查调用代码里的命令。比如原来写的是subprocess.run(["python", "child_script.py"]),把python改成python2或者Python2.7的绝对路径,改成subprocess.run(["python2", "child_script.py"])。这样主脚本调用子脚本时就会明确指定用Python2版本。临时修改环境变量(快速测试用)
在终端里先执行export PATH=/usr/bin:$PATH(假设Python2.7在/usr/bin目录下),或者把Python2.7的bin目录放到PATH最前面,比如export PATH=/path/to/python2.7/bin:$PATH,然后再运行python2 FoEC.py -i ./testdata/。这样系统里的python命令会优先指向Python2.7,子脚本如果用python调用的话就会用对版本。不过这个方法是临时的,关闭终端后PATH就恢复原样了。用Python2.7虚拟环境(最干净的长期方案)
如果经常要跑这类Python2.7的脚本,推荐用虚拟环境隔离版本:- 先安装virtualenv:
pip2 install virtualenv(确保用pip2安装,对应Python2环境) - 创建虚拟环境:
virtualenv -p python2.7 py27_env - 激活虚拟环境:Linux/macOS用
source py27_env/bin/activate,Windows用py27_env\Scripts\activate - 激活后,直接运行
python FoEC.py -i ./testdata/就行,这时候所有python、pip命令都会指向虚拟环境里的Python2.7,完全不会和系统的Python3冲突。
- 先安装virtualenv:
内容的提问来源于stack exchange,提问作者Jpike

