-
发生时间:2022-04-26
-
问题描述:
- 目前新产品使用新代码库 A 进行 PCBA 测试,该代码库依赖 Python 3.8.10,因此我在 Windows 系统下安装了 Python 3.8.10。
- 同时我也要维护旧代码库 B,该仓库依赖 Python 3.6.8,因此我又在 Windows 系统下安装 Python 3.6.8。
- 这样带来一个问题:当我使用
python命令时,它只能对应 Python 3.8.10 或者 Python 3.6.8,无法同时支持上述两个项目的开发。
-
问题类别:软件维护
-
原因分析:
- 由于不同的项目需要使用的 Python 语言特性以及第三方库不一定不同,因此不同的项目使用的 Python 版本也不一定相同,这是正常现象。
- 正如在 JavaScript 中,我们使用 npm 管理 nodejs 版本;在 Python 中,我们同样需要使用版本管理工具来管理 Python 版本。
- 经过网上调查(stack overflow 1,stack overflow 2),Python 版本管理工具有 venv、pyenv、virtualenv、virtualenvwrapper 和 anaconda 等。 (一位深度学习组的同事认为 anaconda 很好用,并且已经在他们组的服务器中广泛使用 anaconda。)
- 当然,Python IDE 往往已经内置了一些 Python 版本管理工具以方便用户使用,比如 PyCharm 就内置了 virtualenv, Conda 和 Pipenv 等。
-
解决方案:基于易用性和个人喜好的考虑,我最终选择了 virtualenv 工具来管理 Python 版本。(以下命令默认在 Git Bash 里执行)
- 在默认的 Python 环境下,使用
pip install virtualenv安装 virtualenv 工具。 - 在仓库 A 和 B 的根目录下,分别使用
virtualenv -p <path-to-python.exe> venv命令创建 Python 虚拟环境。 - 在仓库 A 和 B 的根目录下,分别使用
source ./venv/Script/activate命令进入 Python 虚拟环境。 - 在 Python 虚拟环境中,使用
deactivate命令即可退出虚拟环境。 - 创建虚拟环境时,为方便填写 Python 路径,有个小技巧:
为每个 Python 可执行文件的路径创建一个环境变量,如
PYTHON36,在填写 Python 路径时直接写$PYTHON36就可以了。
- 在默认的 Python 环境下,使用
-
实施结果:使用 virtualenv 后,可以在不同项目中自由切换 Python 版本。
-
经验总结:
- virtualenv 安装简单、使用方便(只需记住3条命令),是 Python 版本管理的一个好工具。
- 由于不同 Python 项目使用的 Python 版本不同,建议在各项目的 README 文档中明确声明所采用的 Python 版本。
- 同理,
requirements.txt里面的第三方依赖库也应该注明其版本号。(可以使用pip freeze命令导出当前项目中第三方依赖库的名字及其版本号。)