使用 PyCharm 进行包管理
前面的章节讲述了如何为项目配置解释器,通常初始的解释器都继承于系统解释器,里面包括一些常用的 Packages。但实际编写程序过程中,我们还需要额外安装一些第三方包,这节将主要讲述如何安装、升级与删除包;以及如何通过 requirement.txt 或者 Pipfile 管理包的。
打开项目, 访问 Preference/Settings -> Project:项目名 -> Python Intepreter
:
Tips:默认情况下,最新版本列仅显示包的稳定版本。如果要将最新可用版本的范围扩展到任何预发行版本(比如 beta 版本),就可以点击第四个按钮(图标像眼睛的按钮)刷新当前列表。
点击按钮 + ,在打开的"可用包"对话框中,预览可用包的列表。
- 在包列表中,选择要删除的包;
- 单击 - 按钮。所选包将从磁盘中删除。
- 在包列表中,选择要升级的包;
- 单击 工具栏中 三角 按钮。所选包将被升级到最新版本。
requirements.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
命令去生成这个文件。
你可以运行 Sync Python Requirements
来更新 requirement.txt,但 PyCharm 提供了快速修复功能。
比如在 Python 文件的 import 语句中,单击尚未导入的包。PyCharm 建议快速修复:点击蓝色字体,就会进入 Sync Python Requirements 对话框,参考执行上面的步骤,文件会更新。
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 命令生成。
本节主要讲了如何维护项目中的包,包括增删改查,相对比较简单, 实践几次基本就可以掌握了。对于requirement.txt 与 pipfile 在实际项目开发中是使用频率是比较高的,这两个文件都会做为项目文件由版本控制工具进行管理,在多人协作项目中,保证所有人的开发环境一致性。所以,深入理解并掌握其使用作为程序员是非常必要的。