记录一个东西。
你问得非常好!pip install -e . 这种安装方式和 pip install numpy 这种方式确实有本质的区别,主要在于它们如何处理包的源代码以及它们的目标用途。
让我们来详细解释一下:
1. pip install package_name (标准安装)
- 工作原理: 当你运行
pip install numpy或pip install requests时,pip会从 Python 包索引 (PyPI) 下载预编译的二进制包(通常是.whl文件,即 wheel 文件)或源代码包(sdist)。下载完成后,pip会将包的内容(Python 模块、数据文件等)复制到你的 Python 环境的site-packages目录中。 pip list显示:pip list会显示包的名称和版本号,例如numpy 1.26.4。因为包的实际文件已经被复制到了site-packages目录,所以不需要显示额外的本地路径。- 特点:
- 独立性: 包的副本是独立的,不受原始下载位置的影响。即使你删除了下载的缓存文件,包仍然在
site-packages中可用。 - 稳定性: 一旦安装,包的代码就是固定的。如果你想修改包的代码,你需要先卸载它,修改源代码,然后重新安装。
- 用途: 主要用于使用一个库,而不是开发它。这是最常见的安装方式,适用于你作为用户引入第三方库到你的项目中。
- 独立性: 包的副本是独立的,不受原始下载位置的影响。即使你删除了下载的缓存文件,包仍然在
2. pip install -e . (可编辑安装 / 开发模式安装)
- 工作原理: 当你在一个包含
setup.py或pyproject.toml文件的项目根目录中运行pip install -e .时,-e代表 “editable”(可编辑)。pip不会将包的内容复制到site-packages目录。相反,它会在site-packages目录中创建一个链接(通常是一个.egg-link文件或.pth文件),这个链接指向你当前项目所在的本地源代码目录。
这样,当你导入这个包时,Python 解释器会通过这个链接直接从你的本地源代码目录加载文件。 pip list显示:pip list会显示包的名称和版本号,但更重要的是,它会在右边显示一个本地路径,例如faive-gym 0.1.0 (/home/swanchan/faive_gym_oss)。这个路径就是pip创建的链接所指向的实际源代码位置。- 特点:
- 实时修改: 这是最大的优点。当你修改了本地源代码目录中的文件时,这些修改会立即生效,无需重新安装。你只需保存文件,然后重新运行你的 Python 脚本或程序,它就会使用你修改后的代码。
- 方便开发: 极其适合当你正在开发一个 Python 包、库或框架时。你可以一边编写代码,一边测试和调试,而不需要频繁地卸载和安装。
- 调试友好: 因为你直接在源代码上工作,所以使用调试器(如 VS Code 或 PyCharm 的调试器)可以很容易地设置断点、单步执行,并查看变量。
- 依赖本地路径: 包的可用性依赖于你本地源代码目录的存在。如果你移动或删除了这个目录,那么这个“安装”的包就会失效。
- 用途: 主要用于开发一个库或项目,或者当你需要对一个已有的库进行本地修改和测试时。
总结区别:
| 特性 | pip install package_name (标准安装) | pip install -e . (可编辑安装) |
|---|---|---|
| 目的 | 使用/部署一个稳定的库版本 | 开发/调试一个库或项目 |
| 代码位置 | 复制到 site-packages 目录 | 留在原始源代码目录,site-packages 中只存放一个指向该目录的链接 |
| 修改生效 | 需重新安装才能生效 | 实时生效,无需重新安装 |
pip list | 显示包名和版本 | 显示包名、版本,以及本地源代码路径 |
| 独立性 | 独立于原始下载位置 | 依赖于本地源代码目录 |
| 常见场景 | 安装 NumPy、Requests 等第三方库到你的应用中 | 开发你自己的 Python 库,或对已安装库进行本地修改和测试 |
所以,当你看到 faive-gym 0.1.0 (/home/swanchan/faive_gym_oss) 这样的输出时,就意味着 faive_gym 是以可编辑模式安装的,它的实际代码就位于 /home/swanchan/faive_gym_oss 这个文件夹里。
468



被折叠的 条评论
为什么被折叠?



