一、关于 requirements.txt 文件

该文件用于记录当前环境中安装的 Python 库及其版本,方便在另一个环境或机器上部署同样的环境。

  1. 创建 requirements.txt 文件:

    1
    $ pip freeze > requirements.txt

    文件名可以任意起。但一般约定为 requirements.txt

  2. 安装 requirements.txt 文件所指定的模块:

    1
    $ pip install -r requirements.txt
  3. requirements.txt 文件并没有解决版本冲突问题。

二、使用 virtualenv/venv + pip 管理虚拟环境

在开发环境和生产环境下最好都使用虚拟环境来管理项目的依赖。因为随着 Python 项目越来越多,不同的项目可能会使用不同的版本的某个 Python 库,同一个 Python 库的不同版本可能不兼容。

虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之间的 Python 库,也可以隔离项目与操作系统之间的 Python 库。

virtualenv 是一个用来创建虚拟环境的第三方库,同时适用于 Python2 和 Python3。Python3.3 及以上版本还内置了 venv,它的用法与 virtualenv 类似。

virtualenv 和 venv 的基本使用:

  1. 创建虚拟环境:

    对于 venv,使用下面的命令来创建虚拟环境,其中 the-venv 是虚拟环境的名字,可以自由修改(通常会使用 venv 或 env 作为虚拟环境名)。

    1
    $ python -m venv the-venv

    如果是 virtualenv,使用下面的命令:

    1
    $ virtualenv the-venv

    以上两条命令的结果都是在当前目录下创建一个名为 the-venv 的虚拟环境目录,以后安装到虚拟环境的包都会存储在这儿。

  2. 激活虚拟环境:

    要使用虚拟环境,必须先激活它,否则仍然会使用全局的 Python 解释器和 pip。

    不同操作系统激活虚拟环境的方式不同:

    • Linux & Mac

      1
      $ source the-venv/bin/activate
    • Windows

      1
      $ the-venv\scripts\activate

    激活虚拟环境后,命令行提示符前面会显示虚拟环境的名字。

    使用 deactivate 命令可以退出虚拟环境。

  3. 用 pip 管理依赖:

    激活虚拟环境后再使用 pip,使用的就是虚拟环境里的 pip 了,所以用这个 pip 安装的包也会安装在虚拟环境中。

三、使用 pipenv 管理虚拟环境

requests 库的作者写了一个新的库:pipenv,它汇集了 pip 和 virtualenv 的功能,还创建了 Pipfile 和 Pipfile.lock 用于代替简陋的 requirements.txt,是一个强大的命令行工具。

pipenv 的基本使用方式:

  1. 先进入项目目录:

    1
    $ cd project_dir
  2. 创建虚拟环境并指定要使用的 Python 版本:

    1
    $ pipenv --python 3.7

    创建虚拟环境的同时会创建 Pipfile 文件。

    与 virtualenv 和 venv 不同的是,用 pipenv 创建的虚拟环境不会存储在当前目录,而是存储在 ~/.local/share/virtualenvs(Linux)

  3. 激活虚拟环境:

    1
    $ pipenv shell

    进入虚拟环境后,对 Python、Python 库的操作就都与全局环境无关了。

  4. 使用 pipenv 安装模块:

    1
    $ pipenv install (--skip-lock) requests

    会产生 Pipfile.lock 文件,记录已安装的模块及其版本。加上 --skip-lock 参数可以跳过 lock 的过程

  5. 使用 exit 可以退出虚拟环境

其他常用命令:

  1. 将项目移植到别的环境后,可以使用 pip install 命令来在新环境中安装记录在 Pipfile 中的包
  2. pipenv install -d package_name:将包安装为开发时依赖。
  3. pipenv clean:自动卸载环境中所有没有记录在 Pipfile 中的包。
  4. 可以使用 pipenv --venv 命令获取当前虚拟环境存储的位置。
  5. pipenv --rm 删除当前虚拟环境

四、使用 pyenv 管理 python 版本

由于 pyenv 是脚本插件,所以只能在类 UNIX 系统上使用。如果要在 windows 上使用,可以使用 pyenv-win(pyenv 的 fork 版本),或者在 WSL 中使用 pyenv。

安装 pyenv:

1
2
3
4
5
6
7
8
9
# 克隆代码
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

# 设置环境变量
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

# 设置启动 shell 时自动加载 pyenv 脚本(如果不设置,虽然 pyenv 命令可用,但无法切换 Python 版本)
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc

pyenv 常用命令:

  • pyenv versions:查看当前已安装的 Python 版本(安装 pyenv 之前的 Python 版本全部归为 system 版本)
  • pyenv version:查看当前使用的 Python 版本
  • pyenv install ...:安装指定版本的 Python
  • pyenv global python版本:切换全局 Python 版本
  • pyenv local python版本:切换当前文件夹下的 Python 版本
  • pyenv shell python版本:切换当前 shell 中的 Python 版本

新安装的 Python 和其对应的包都会安装在 $PYENV_ROOT/versions 下。

pyenv 一般与 pipenv 搭配使用,一般用不到切换 Python 版本的命令,只是在使用 pipenv 时用 --python 版本号 参数指定虚拟环境要使用的 Python 版本。