使用 PyCharm 进行包管理

前面的章节讲述了如何为项目配置解释器,通常初始的解释器都继承于系统解释器,里面包括一些常用的 Packages。但实际编写程序过程中,我们还需要额外安装一些第三方包,这节将主要讲述如何安装、升级与删除包;以及如何通过 requirement.txt 或者 Pipfile 管理包的。

1. 安装、卸载与升级包

打开项目, 访问 Preference/Settings -> Project:项目名 -> Python Intepreter

图片描述

Tips:默认情况下,最新版本列仅显示包的稳定版本。如果要将最新可用版本的范围扩展到任何预发行版本(比如 beta 版本),就可以点击第四个按钮(图标像眼睛的按钮)刷新当前列表。

1.1 安装包

点击按钮 + ,在打开的"可用包"对话框中,预览可用包的列表。
图片描述

1.2 卸载包

  • 在包列表中,选择要删除的包;
  • 单击 - 按钮。所选包将从磁盘中删除。

图片描述

1.3 升级包

  • 在包列表中,选择要升级的包;
  • 单击 工具栏中 三角 按钮。所选包将被升级到最新版本。

图片描述

2. 使用 “requirement.txt” 管理包

requirements.txt 文件,用于记录所有依赖包及其精确的版本号,以便新环境部署。

2.1 创建当前项目的 requirement.txt

点击菜单 Tool -> Sync Python Requirements,在打开的对话框中,指定要求文件的名称。需求文件的建议名称是 requirement.txt。当具有此名称的文件添加到项目根目录后,Python 集成工具会自动检测到该文件。
图片描述

选择处理所需库版本的方法。可以定义版本号,通常我们会选择等于。 上图列表中的四项分别代表:

  • 不指定版本;
  • 必须等于当前版本;
  • 大于等于当前版本;
  • 兼容当前版本。

在上图的对话框中的三个可选项,用来定义管理策略:

图片描述

  • Remove unused Requirements: 删除未使用的库和包的记录。也就是包安装了,但在代码一次也没使用过,这些包名将不会出现在 requirement.txt 文件中;
  • Modify base files (defined with -r or – requirement): 允许修改基础的requirement 文件(如果requirements.txt 任何内容都被引用了);
  • Keep existing version specifier if it matches the current version: 如果版本号满足所选方法版本的处理方式,则保持不变。

点击 “ok",生成下面的文件:文件中包含了此项目中所使用的的所有的包以及版本信息。
图片描述

Tips:如果你不想用默认的“requirement.txt", 而选择其它文件名,需要到 Settings/Preferences 下 Tools -> Python Integrated Tools,指定新的名字,这样包才能被自动监控。

图片描述

除此以外, 你也可以在当前项目根目录下,你能在终端控制台运行 pip freeze > requirements.txt 命令去生成这个文件。

图片描述

2.2 更新 requirement.txt

你可以运行 Sync Python Requirements 来更新 requirement.txt,但 PyCharm 提供了快速修复功能。

比如在 Python 文件的 import 语句中,单击尚未导入的包。PyCharm 建议快速修复:点击蓝色字体,就会进入 Sync Python Requirements 对话框,参考执行上面的步骤,文件会更新。

图片描述

3. 使用 Pipfile

Pipfile 文件用于记录虚拟环境安装的软件包版本。作用类似于 requirements.txt 文件,但 Pipfile 的功能更强大。 Pipfile 是 Pipenv 虚拟环境用于管理项目依赖项的专用文件,此文件对于使用 Pipenv 至关重要。当新项目或现有项目创建 Pipenv 环境时,将自动生成 Pipfile。该文件将添加到当前项目,可以在"Project"工具窗口中看到它。同样,当您第一次使用 PyCharm 中的 Pipfile 文件打开项目时,将根据文件自动配置 Pipenv 虚拟环境。

step1:PyCharm 为Pipenv 虚拟环境自动创建 Pipfile ,文件如下所示:图片描述

python_version 参数是创建新环境时指定的基本解释器的版本。packages 部分是可以列出项目所需的包的位置。url 是下载包的地址。另外, [packages] 和 [dev-packages] 部分之间的区别是 [packages] 定义了生产和开发环境的要求,而 [dev-packages] 仅列出用于开发目的的要求。

Tips:PyCharm 建议安装特定于 Pipfile 的插件。单击相应的链接,安装 Toml 的插件:

图片描述

step2:安装插件后,格式化显示文件内容。通过修改 packages 部分添加新的包依赖项。

图片描述

step3:然后在终端控制台输入 pipenv update 或者 pipenv lock

图片描述

step4:查看包是否被安装,菜单 Settings/Preferences -> Project <项目名> -> Project Interpreter, 检查新增加的包已经安装了。

图片描述

step5:现在尝试先安装包再查看pipfile的过程,点击上图的 + 按钮。选择安装 libopencv 包:

图片描述

step6:安装成功后, 再次查看 Pipfile。可以发现新安装的包已经自动更新了:

图片描述

Tips:运行 pipenv update 后,包安装同时会生成一个新的文件 Pipfile.lock, 文件内容如下图所示:
图片描述

Pipfile 与 Pipfile 二者关系:

  • Pipfile.lock 文件顾名思义是起到版本锁作用,用于避免版本更新导致不兼容的问题。它详细标识了该项目的安装的包的精确版本信息、最新可用版本信息和当前库文件的hash值。换句话说是:冻结软件包名称及其版本,以及其依赖关系的列表。我们可以看到每个包都有明确的版本信息。
  • 如果只存在 Pipfile 文件,那么文中标识的依赖若为 <包名>="*",意味着没有版本限制,将会默认安装最新版本的包。也可指定特定版本。
  • 如果存在 Pipfile.lock 文件,那么将根据 Pipfile.lock 进行安装指定版本的包。切勿手动修改 Pipfile.lock文件。
  • 如果 Pipfile.lock 文件不存在或被删除,可使用 pipenv lock 命令生成。

4. 小结

本节主要讲了如何维护项目中的包,包括增删改查,相对比较简单, 实践几次基本就可以掌握了。对于requirement.txt 与 pipfile 在实际项目开发中是使用频率是比较高的,这两个文件都会做为项目文件由版本控制工具进行管理,在多人协作项目中,保证所有人的开发环境一致性。所以,深入理解并掌握其使用作为程序员是非常必要的。
图片描述