10

要不我们还是用回 virtualenv/venv 和 pip 吧

 3 years ago
source link: https://greyli.com/back-to-virtualenv-venv-and-pip/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

要不我们还是用回 virtualenv/venv 和 pip 吧

这篇文章没什么新东西,只是介绍古老又靠谱的 Python 虚拟环境和依赖管理方式:virtualenv/venv+pip。一来方便被我在《Flask 入门教程》和《Flask Web 开发实战》带入 Pipenv 坑的初学者了解基础工具的用法,二来方便其他 Python 初学者参考,自己顺便做个总结。如果你想了解更多详细内容,Python 官方教程这一章写的更好,可以替代这篇文章。

既然大部分试图简化 Python 虚拟环境和依赖管理工作流程的新工具都不够稳定,继续使用 virtualenv/venv 和 pip 这样的底层工具也是一个不错的选择,而且大多数人也是这么做的。它们虽然用起来有一点麻烦,但至少更可靠。

下面是一些基本概念:

  • PyPA:指 Python Packaging Authority,一个维护 Python 打包相关项目的小组,相关项目具体见 https://github.com/pypa
  • pip:Python 包安装器 。
  • virtualenv:Python 虚拟环境管理工具。
  • venv:Python 标准库内置的虚拟环境管理工具,Python 3.3 加入,Python 3.5 开始作为管理虚拟环境的推荐工具,用法类似 virtualenv。如果你使用 Python 3,推荐使用 venv 来替代 virtualenv。

使用 virtualenv/venv 管理虚拟环境

venv 模块

如果你使用 Python 3(具体说是 Python 3.3 及以上版本),推荐使用标准库内置的 venv 模块替代 virtualenv,两者的使用方式基本相同,唯一不同的是创建虚拟环境的方式。

如果你使用 Python 2,那就只能选择 virtualenv,你需要额外安装它。我先假设你已经安装了 pip,因为在 Python 2 >=2.7.9 或 Python 3 >=3.4 这些版本的 Python 会一并安装 pip,其他版本可以参考文档的安装部分。在 Windows 下使用下面的命令安装 virtualenv:

$ pip install virtualenv

其他操作系统可以使用下面的命令安装:

$ sudo pip install virtualenv

尽管不推荐使用 sudo pip 的方式安装 Python 包,但这仍然是最简单和统一的方式。更安全的方式是使用系统包管理器来安装,或是使用 pip –user 方式安装。

创建虚拟环境

假设我们的项目名叫 snow,创建对应的文件夹然后切换到根目录:

$ mkdir snow
$ cd snow

如果使用 venv,那么使用下面的命令创建虚拟环境,其中 snow-venv 是虚拟环境的名字,也作为创建的虚拟环境文件夹名称,你可以自由修改(通常会使用 venv 或 env 作为虚拟环境名):

$ python -m venv snow-venv

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

$ virtualenv snow-venv

这会在当前目录创建名为 snow-venv 的虚拟环境文件夹,你需要把这个文件夹名称加入 .gitignore 文件以便让 Git 忽略。

激活虚拟环境

通过执行对应的激活脚本来激活虚拟环境,不同操作系统的激活命令(激活脚本及路径)有一点不同。Windows(CMD.exe)使用下面的命令激活:

$ snow-venv\scripts\activate

Linux 和 macOS(bash/zsh)使用下面的命令:

$ source snow-venv/bin/activate
$ . snow-venv/bin/activate

类似的,其他终端程序可以执行对应的激活脚本来激活虚拟环境。

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

(snow-venv) $

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

使用 pip 管理依赖

简单列一下基本用法,虽然大部分人都很熟悉了……以 Flask 为例,首先是安装依赖:

(snow-venv) $ pip install flask

更新依赖:

(snow-venv) $ pip install --upgrade flask
(snow-venv) $ pip install -U flask

卸载依赖:

(snow-venv) $ pip uninstall flask

除此之外,还有 pip show flask 命令可以查看某个依赖的详细信息,pip list 列出所有依赖。

下面的命令可以手动生成依赖列表:

(snow-venv) $ pip freeze > requirements.txt

如果你需要手动开发依赖和生产依赖,可以手动把开发相关的依赖放到单独的文件,比如 requirements-dev.txt。

当你需要在新的机器创建程序运行环境时,(创建虚拟环境后)只需要使用下面的命令从依赖文件安装所有依赖:

(snow-venv) $ pip install -r requirements.txt

如果安装包的时候速度太慢,可以考虑设置 PyPI 国内镜像,具体参考这篇文章

从其他工具迁移回来

如果你想从 Pipenv 迁移回来,方法很简单,只需要生成一个 requirements.txt 文件即可。使用下面的命令生成一般依赖列表:

$ pipenv lock -r

使用下面的命令输出开发依赖列表:

$ pipenv lock -r --dev

然后手动把两个命令的输出保存为 requirements.txt 和 requirements-dev.txt。

从 Poetry、Conda 等其他工具迁移回来可以使用 pipreqs 来生成 requirements.txt,它会基于项目代码的导入语句来生成依赖列表。

在下一篇文章,我会介绍一些辅助工具来搭配 virtualenv/venv+pip 使用,让虚拟环境和依赖管理更方便,比如 virtualenvwrapper、pip-tools 等。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK