关于 requirements.txt 文件
该文件用于记录当前环境中安装的 Python 库及其版本,方便在另一个环境或机器上部署同样的环境。
创建 requirements.txt 文件:
$ pip freeze > requirements.txt
文件名可以任意起。但一般约定为 requirements.txt
安装 requirements.txt 文件所指定的模块:
$ 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 的基本使用:
创建虚拟环境:
对于 venv,使用下面的命令来创建虚拟环境,其中 the-venv 是虚拟环境的名字,可以自由修改(通常会使用 venv 或 env 作为虚拟环境名)。$ python -m venv the-venv
如果是 virtualenv,使用下面的命令:以上两条命令的结果都是在当前目录下创建一个名为 the-venv 的虚拟环境目录,以后安装到虚拟环境的包都会存储在这儿。
$ virtualenv the-venv
激活虚拟环境:
要使用虚拟环境,必须先激活它,否则仍然会使用全局的 Python 解释器和 pip。
不同操作系统激活虚拟环境的方式不同:Linux & Mac
$ source the-venv/bin/activate
Windows
$ the-venv\scripts\activate
激活虚拟环境后,命令行提示符前面会显示虚拟环境的名字。
使用deactivate
命令可以退出虚拟环境。
用 pip 管理依赖:
激活虚拟环境后再使用 pip,使用的就是虚拟环境里的 pip 了,所以用这个 pip 安装的包也会安装在虚拟环境中。
使用 pipenv 管理虚拟环境
requests 库的作者写了一个新的库:pipenv,它汇集了 pip 和 virtualenv 的功能,还创建了 Pipfile 和 Pipfile.lock 用于代替简陋的 requirements.txt,是一个强大的命令行工具。
pipenv 的基本使用方式:
先进入项目目录:
$ cd project_dir
创建虚拟环境并指定要使用的 Python 版本:创建虚拟环境的同时会创建 Pipfile 文件。
与 virtualenv 和 venv 不同的是,用 pipenv 创建的虚拟环境不会存储在当前目录,而是存储在~/.local/share/virtualenvs
(Linux)$ pipenv --python 3.7
激活虚拟环境:进入虚拟环境后,对 Python、Python 库的操作就都与全局环境无关了。
$ pipenv shell
使用 pipenv 安装模块:会产生 Pipfile.lock 文件,记录已安装的模块及其版本。加上
--skip-lock
参数可以跳过 lock 的过程$ pipenv install (--skip-lock) requests
使用
exit
可以退出虚拟环境
其他常用命令:
- 将项目移植到别的环境后,可以使用
pip install
命令来在新环境中安装记录在 Pipfile 中的包 pipenv install -d package_name
:将包安装为开发时依赖。pipenv clean
:自动卸载环境中所有没有记录在 Pipfile 中的包。- 可以使用
pipenv --venv
命令获取当前虚拟环境存储的位置。 pipenv --rm
删除当前虚拟环境
使用 pyenv 管理 python 版本
由于 pyenv 是脚本插件,所以只能在类 UNIX 系统上使用。如果要在 windows 上使用,可以使用 pyenv-win(pyenv 的 fork 版本),或者在 WSL 中使用 pyenv。
安装 pyenv:
# 克隆代码
$ 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 ...
:安装指定版本的 Pythonpyenv global python版本
:切换全局 Python 版本pyenv local python版本
:切换当前文件夹下的 Python 版本pyenv shell python版本
:切换当前 shell 中的 Python 版本
新安装的 Python 和其对应的包都会安装在 $PYENV_ROOT/versions
下。
pyenv 一般与 pipenv 搭配使用,一般用不到切换 Python 版本的命令,只是在使用 pipenv 时用 --python 版本号
参数指定虚拟环境要使用的 Python 版本。