「EP」04 `pip install -e .`?`python -m pip`?你们究竟是什么?
Greetings! ¶
嗨!这里是阿乎的博客!(> ▽ <) /~
平时装Python项目的依赖基本都是无脑:pip install -r requirements.txt
。但在探索一些 GitHub 仓库时,常会遇到几个很像的东西:python -m pip install ...
和 pip install -e .
。
它们究竟是什么?和普通的 pip install
又有什么区别?🤔让我们一起来看看吧!
1 pip install -r requirements.txt
¶
首先我们重新看看最为熟悉的:
pip install -r requirements.txt
在一个需要依赖的Python项目中,通常会有一个requirements.txt
文件,里面列出了项目所需的所有依赖包及其版本。
my_project/
├── requirements.txt
├── main.py
└── ...
那么pip install -r requirements.txt
的作用就是:读取requirements.txt
文件中的依赖列表,并安装这些依赖包到当前环境中。
2 python -m pip install ...
¶
python -m pip install ...
指令相较于我们熟悉的pip install ...
,多了一个python -m
。
其含意也很简单,即使用指定的 Python 解释器来运行 pip 模块,并安装依赖包。
如果你不熟悉Python解释器,可以参考本系列的这一节: 「EP」01 Python是如何运行的?(重制)
由于许多用户通常会使用多个Python版本(如我既用Python 3.8又用Python 3.12),因此在没有使用虚拟环境的情况下,直接使用pip install ...
可能会导致依赖包被安装到错误的Python版本中。
那么python -m
作为一个前缀,允许用户去指定要将包安装到哪个Python解释器的环境下。
由于目前有conda、uv甚至Python原生的venv一系列虚拟环境工具,且在使用它们的时候通常会“activate”到对应环境中,因此这个命令的使用频率相对较低。
例子 ¶
比如说,我在Windows端安装了Python 3.8和Python 3.12,并且它们的安装路径分别是:
- Python 3.8:
C:\Python38\python.exe
- Python 3.12:
C:\Python312\python.exe
那么如果我想要将requests
包安装到Python 3.8的环境中,我可以使用以下命令:
C:\Python38\python.exe -m pip install requests
3. pip install -e .
¶
还有一些情况,在使用pip
安装依赖前后,还会要求执行:
pip install -e .
-e
指的是“editable”,即“可编辑的”安装方式。
.
代表当前目录,表示将当前项目以“可编辑”的方式安装到当前环境中。
这条命令常在开发一个Python包时使用。它告诉pip
:将不要把我当前这个项目复制到 site-packages 里,而是创建一个指向我项目文件夹的链接。。
site-packages 即 Python 环境中存放第三方包的目录。
这样的话,当你在开发过程中修改了项目代码时,不需要重新安装包,修改会立即生效。(要是每次做了一小个修改,测试的时候还等重新输指令、等待运行的话,那也太痛苦了😅)
4. 总结 ¶
OK,总之以上就是这三个命令的区别和作用。简单来说,大部分情况下pip install ...
就够了,不过认识其他长得相似的指令也是一件很有意思的事情捏。
Reference ¶
- Python 文档 — 命令行选项(
-m
)
https://docs.python.org/3/using/cmdline.html#cmdoption-m - pip 用户指南 —
pip install
与-r
https://pip.pypa.io/en/stable/cli/pip_install/ - Packaging 官方 — 可编辑安装(editable /
-e
)
https://packaging.python.org/en/latest/discussions/install-requires/#editable-installs