关于 requirements.txt 文件

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

创建 requirements.txt 文件:

  1. $ pip freeze > requirements.txt

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

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

  1. $ pip install -r requirements.txt

:::info 注: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,使用下面的命令:以上两条命令的结果都是在当前目录下创建一个名为 the-venv 的虚拟环境目录,以后安装到虚拟环境的包都会存储在这儿。

    1. $ virtualenv 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 版本:创建虚拟环境的同时会创建 Pipfile 文件。
    与 virtualenv 和 venv 不同的是,用 pipenv 创建的虚拟环境不会存储在当前目录,而是存储在 ~/.local/share/virtualenvs(Linux)

    1. $ pipenv --python 3.7
  3. 激活虚拟环境:进入虚拟环境后,对 Python、Python 库的操作就都与全局环境无关了。

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

    1. $ pipenv install (--skip-lock) requests
  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. $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  3. # 设置环境变量
  4. $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
  5. $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
  6. # 设置启动 shell 时自动加载 pyenv 脚本(如果不设置,虽然 pyenv 命令可用,但无法切换 Python 版本)
  7. $ 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 版本。