1. virtualenv 说明

在开发Python应用程序时,系统默认的Python版本可能会不兼容这个应用程序, 如果同时开发多个应用程序, 可能会用到好几个版本的python环境, 这种情况下,每个应用可能需要各自拥有一套"独立"的Python运行环境。virtualenv就是用来为一个应用创建一套"隔离"的Python运行环境的工具。virtualenv是python的一个虚拟化环境工具,用来建立一个虚拟的python环境,一个专属于项目的python环境, 用virtualenv 来保持一个干净的环境非常有用, 可以帮助我们在同一台host上创建多套纯净的python解释器环境并实现相互隔离,各个环境下安装的库仅限于自己的环境,不会影响到别人。

2. 配置过程

注意:以下配置过程是在如下环境下操作,不通的操作系统版本,python版本操作可能有不同。

  1. win10
  2. win10 安装的python 版本为 python3.7
  3. Pycharm 版本为 2022.2.1

2.1 配置过程如下:

  1. 安装 virtualenv :在windows主机上通过pip安装virtualenv
  2. 创建虚拟环境:在项目目录下创建 virtualenv 的工作空间。
  3. 开启virtualenv。
  4. 在Pycharm 中配置虚拟环境。
  5. 在虚拟环境中生成依赖配置文件 requirements.txt
  6. 通过 git 共享依赖配置。
  7. 在其他服务器上使用 virtualenv 加载 requirements.txt

2.2 分步骤描述

2.2.1 安装 virtualenv

通过 pip 安装 virtualenv 命令如下:

pip install virtualenv

建议切换 pip 源为国内源,可以参考文章:Windows下配置pip指定下载源具体操作步骤 将pip源切为国内源。

2.2.2 创建虚拟环境

我的Python项目名称为:habitat_py ,项目保存在 e:/workspace/gitee/habitat_py 目录下。

e:/workspace/gitee/habitat_py 目录下创建子目录 venv,命令如下:

# 创建python 3.6的虚拟环境
virtualenv venv --python=python3.6

2.2.3 开启virtualenv

进入 venv 目录

激活
cmd> E:\workspace\gitee\habitat_py\venv\Scripts\activate
关闭
(venv)  E:\workspace\gitee\habitat_py\venv\Scripts\deactivate

注意

  • virtualenv 创建的虚拟环境与主机的 Python 环境完全无关
  • 你主机配置的库不能在 virtualenv 中直接使用。
  • 你需要在虚拟环境中利用 pip install 再次安装配置后才能使用。

2.2.4 在Pycharm 配置 virtualenv

具体配置过程如下图:

步骤3中选择刚刚创建的虚拟环境,则 python interpret 会选取虚拟环境中的 python 而不是你系统安装的 python。

2.2.4 在虚拟环境中生成依赖配置文件 requirements.txt

上述步骤中已经在本机环境下配置成功虚拟环境,把需要安装的Package通过requirements.txt导出保存在git记录中。后续一个命令便可部署新环境。具体步骤如下:

# 注意:需要在virtualenv 环境下执行如下命令
(venv) >  pip freeze > requirements.txt

可以观察到在项目根目录下生成了 requirements.txt 文件如下:

et-xmlfile==1.1.0
numpy==1.21.5
openpyxl==3.0.9
pandas==1.3.5
python-dateutil==2.8.2
pytz==2021.3

2.2.5 在git中保存配置

将上述生成的requirements.txt 文件提交到 git中,后续在其他服务器上就可以直接复用这些配置,快速启动开发。

参考资料

  1. Windows下配置pip指定下载源具体操作步骤
  2. windows下使用pycharm配置python的virtualenv环境 [写的很全面,重点参考]
  3. pycharm pip源修改以及包管理
  4. Is it bad to have my virtualenv directory inside my git repository?
03-05 23:53