搞懂 Python 本地安装:`pip install .` 与 `pip install -e .` 的本质区别
·
在 Python 项目开发中,当你编写了一个自己的包(包含 setup.py 或 pyproject.toml),并希望将其安装到当前的虚拟环境以便调用时,通常会在项目根目录执行安装命令。
最常见的两个命令是 pip install . 和 pip install -e .。虽然它们看起来只有两个字符的差异,但底层的工作机制和适用场景却完全不同。本文将带你理清这两者的关系。
这里的 . 代表什么?
在 Linux 和终端语境中,.(点)代表当前目录。因此这两个命令的意思都是“将当前目录下的 Python 项目作为一个包安装到 Python 环境中”。前提是当前目录必须存在构建文件(如 setup.py 或 pyproject.toml)。
1. pip install .:标准安装(“复制粘贴”模式)
这是最标准的打包与安装流程。
- 工作机制: 当你执行这个命令时,
pip会读取项目的配置文件,将你的源代码打包,并将其物理复制到当前 Python 环境的site-packages目录下。 - 核心影响: 安装完成后,你的虚拟环境使用的是
site-packages里的那份副本。此时,如果你在 IDE 中修改了工程目录下的源代码,环境中的包并不会发生任何改变。你必须重新执行一次pip install .,才能让修改生效。 - 适用场景: 生产环境与部署部署。 当你的代码已经开发完毕,准备打包发布到服务器,或者提供给最终用户使用时,使用标准安装可以保证代码的静态和稳定。
2. pip install -e .:可编辑安装(“快捷方式”模式)
这里的 -e 是 --editable(可编辑)的缩写,也被称为“开发模式”(develop mode)。
- 工作机制: 它不会将你的代码复制到
site-packages目录中。相反,它会在site-packages目录下创建一个“链接”(通常是通过.egg-link文件或特殊的路径配置文件),这个链接直接指向你的源代码所在的工作目录。 - 核心影响: 因为环境直接通过引用指向了你的工作目录,所以你在本地编辑器中对源码做的任何修改(只要不涉及新增、删除核心文件或改变入口点配置),保存后都会立即在运行环境中生效,无需重新安装。
- 适用场景: 日常开发与 Debug。 在开发自己的开源库或企业内部工具时,代码处于频繁变动的状态,可编辑安装省去了无数次重复打包和安装的麻烦,极大地提高了开发效率。
总结与对比
为了更直观地理解,我们可以通过下表进行对比:
| 特性 | pip install . (标准安装) |
pip install -e . (可编辑安装) |
|---|---|---|
| 底层机制 | 将源码文件复制到 site-packages |
在 site-packages 创建指向源码的链接 |
| 源码修改 | 修改后无效,必须重新安装 | 保存修改后立即生效,直接可跑 |
| 项目体积 | 占用额外的磁盘空间 (复制了一份) | 几乎不占额外空间 (只有一个链接文件) |
| 核心场景 | 生产环境、最终部署、测试最终包 | 本地开发、代码调试、频繁修改阶段 |
一句话最佳实践:
自己在电脑上写代码、调 Bug 时,永远用 pip install -e .;把项目放上服务器正式运行,或者打包给别人用时,用 pip install .。
更多推荐
所有评论(0)