【python】pip install -e . 和 不带-e的区别
【python】pip install -e . 和 不带-e的区别
这两种安装方式的区别其实非常关键,特别是在开发 Python 包时。
1. 普通安装(pip install .
)
-
行为:
pip
会读取当前目录下的pyproject.toml
或setup.py
,把项目打包(build)成一个 wheel。- 然后把 wheel 安装到当前环境的
site-packages/
目录。 - 安装完成后,Python 运行时只会使用
site-packages
里的副本。
-
效果:
- 之后即使你在源码目录里修改
.py
文件,已安装的库不会变。 - 需要重新
pip install .
才能更新。
- 之后即使你在源码目录里修改
2. 可编辑安装(pip install -e .
)
-
行为:
pip
会在site-packages/
里创建一个“链接”(.pth
文件或符号链接),指向你的源码目录。- 并且只在第一次时处理依赖(如
install_requires
)。
-
效果:
- 你修改源码目录里的
.py
文件,立刻会反映到 Python 运行时,不需要重新安装。 - 常用于开发调试:你边改代码边
import
测试。 - 但如果你改了 依赖定义(
pyproject.toml
/setup.py
),需要重新pip install -e .
。
- 你修改源码目录里的
3. 举例
假设你的包目录结构:
mypkg/setup.pymypkg/__init__.pycore.py
-
用
pip install .
安装后:- 系统会复制
mypkg/core.py
到site-packages/mypkg/core.py
。 - 你修改源码文件,导入时不会更新。
- 系统会复制
-
用
pip install -e .
安装后:site-packages/
里只有一个指向你源码路径的引用。- 你修改源码文件,再次导入时立刻生效。
4. 适用场景
pip install .
→ 用于发布/部署(生产环境、CI/CD、Docker)。pip install -e .
→ 用于开发调试(本地写代码,快速迭代)。
⚠️ 一个常见误区:
-e
不是安装更“轻量”,而是让环境直接“追踪”源码路径,所以适合开发,但不适合生产。