Python版本冲突?试试配置多个版本!

问题

有个cocos的项目,使用的cocos 3.13.1,官方指定需要使用python2.X(我不确定最新的cocos 3.17是否已经兼容了最新的Python 3.7.1)。如果使用python3.7.1,直接报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 29301: illegal multibyte sequence

后来又有一个项目使用了python脚本,其中的aes加解密功能需要导入 Crypto.Cipher 模块,而2.x的python在使用aes时报错,只能兼容3.7.1版本的python。

难道每次运行不同的项目时都要先改一下环境变量吗?或者要使用绝对路径来运行python命令?当然不行,这是不能容忍的。所以,就要想办法配置多个版本的python。

思路

查了很多方案,大部分是说运行的文件中含有中文字符,或者编码格式不对,才打不开,要去错误提示的文件中删除乱码的字符等,还有一种解决方案是修改cocos-console下面的setup.py,试图让cocos适配python3.x版本,虽然作者本人说成功了,但还是有点危险,担心会导致以后cocos项目中遇到什么奇葩的问题,这种情况下排查会非常困难。所以都不可取,最后只能往指定多个版本的python方向查。也好在找到了方案如下:

该解决方案参考自 《为什么你的python版本一团糟?因为少了这个操作

系统环境变量中配置一个通用的python版本,需要特殊版本的项目下创建一个虚拟环境,使用特定版本的python,该项目以后每次运行python脚本时都需要在该虚拟环境下执行。

还是配置为3.7.1的,保证aes功能正常使用, 那么需要对cocos使用的python单独指定为python 27,可以使用虚拟环境。

所谓虚拟环境,就是在该虚拟环境下执行的任何python脚本,都是运行与该环境所对应的python版本下。

那么我的case就有两种方案:

  1. 系统环境变量使用python 3.7.1,为cocos项目创建python 27的虚拟环境,而且此时无论是使用下述哪种方式编译cocos项目,都是使用的python 27,正常无误:
python build_native.py
cocos run -p android -m release --ap android-19
  1. 系统环境变量使用python 27,为aes加解密的python项目创建python 3.7.1的虚拟环境。

解决方案

1.安装virtualenv
pip install virtualenv

成功时输出:

Installing collected packages: virtualenv
Successfully installed virtualenv-16.1.0

如果pip命令无法识别,需要安装,方法见【Windows安装Python和pip】

2.创建虚拟环境

进入到合适的目录下(一般是项目根目录,但不建议加入 git 仓库里提交),通过 virtualenv 命令创建一个名为 MY_ENV 的环境(这个名字可自定义)

virtualenv MY_ENV

成功时输出:

D:\work\GitHub\SMSSDK-for-Cocos2d>virtualenv MY_ENV
Using base prefix 'd:\\env\\python\\python3.7.1'
New python executable in D:\work\GitHub\SMSSDK-for-Cocos2d\MY_ENV\Scripts\python
.exe
Installing setuptools, pip, wheel...
done.

同时会在工作目录下创建文件夹MY_ENV,默认会使用virtualenv所在的python版本。

你也可以在创建时就指定Python版本

virtualenv -p D:\env\Python27\python.exe ENV27

这样就会在当前工作目录下再创建一个ENV27的目录,其中的虚拟环境就是Python27,在其中执行python脚本时将在27的环境中运行,成功时输出:

D:\work\GitHub\SMSSDK-for-Cocos2d>virtualenv -p D:\env\Python27\python.exe ENV27

Running virtualenv with interpreter D:\env\Python27\python.exe
New python executable in D:\work\GitHub\SMSSDK-for-Cocos2d\ENV27\Scripts\python.
exe
Installing setuptools, pip, wheel...
done.
3.激活

使用虚拟环境前,需要“激活”环境:

Windows

MY_ENV\Scripts\activate

Linux

source MY_ENV/bin/activate

路径根据你所在位置会有所不同,也可以使用完整路径。

激活环境之后,命令行前面会用括号标识出你所在的环境。这时候再通过 pip 安装第三方模块,就不会影响到系统本身的 Python 环境。而你在该环境下运行的任何和python有关的内容都是使用指定的python版本运行的

D:\work\GitHub\SMSSDK-for-Cocos2d>MY_ENV\Scripts\activate

(MY_ENV) D:\work\GitHub\SMSSDK-for-Cocos2d>
4.关闭

当不需要环境时,可以通过 deactivate 命令关闭。当然,直接关掉命令行窗口也没毛病。

虚拟环境的本质

环境变量的作用不用说了,当你环境变量中针对同一个命令同时配了多个路径时,系统会使用最先找到的路径。先查看一下当前的系统环境变量中的PATH:

Windows:

echo %PATH%

Linux:

echo $PATH

输出为:

接下来激活一个虚拟环境,然后再查看一下PATH:

可见,就是在 PATH 的开头增加了我们创建的目录,使用这个目录里的 Python 及相关库。安装新的库也是装在新建的这个目录之下。从而避免与其他版本发生干扰。

你还可以通过 where/which命令查看究竟使用的是哪个路径下的python:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未子涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值