-e
或 --editable
选项什么时候对 pip install
有用?
对于某些项目,requirements.txt 中的最后一行是 -e .
。它具体做什么?
原文由 raitisd 发布,翻译遵循 CC BY-SA 4.0 许可协议
-e
或 --editable
选项什么时候对 pip install
有用?
对于某些项目,requirements.txt 中的最后一行是 -e .
。它具体做什么?
原文由 raitisd 发布,翻译遵循 CC BY-SA 4.0 许可协议
在开发中使用 --editable
的具体例子
如果你像这样使用 这个测试包:
cd ~
git clone https://github.com/cirosantilli/vcdvcd
cd vcdvcd
git checkout 5dd4205c37ed0244ecaf443d8106fadb2f9cfbb8
python -m pip install --editable . --user
它输出:
Obtaining file:///home/ciro/bak/git/vcdvcd
Installing collected packages: vcdvcd
Attempting uninstall: vcdvcd
Found existing installation: vcdvcd 1.0.6
Can't uninstall 'vcdvcd'. No files were found to uninstall.
Running setup.py develop for vcdvcd
Successfully installed vcdvcd-1.0.6
Can't uninstall 'vcdvcd'
是正常的:它试图卸载任何现有的 vcdvcd
然后用以下步骤中生成的“类似符号链接的机制”替换它们,但失败了,因为没有以前的安装。
然后它生成一个文件:
~/.local/lib/python3.8/site-packages/vcdvcd.egg-link
其中包含:
/home/ciro/vcdvcd
.
并充当 Python 解释器的“符号链接”。
所以现在,如果我对 /home/ciro/vcdvcd
下的 git 源代码进行任何更改,它会自动反映在可以从任何目录执行的导入程序上:
python -c 'import vcdvcd'
Note however that at my pip
version at least, binary files installed with --editable
, such as the vcdcat
script provided by that package via scripts=
在 setup.py
上,不要进行符号链接,只是复制到:
~/.local/bin/vcdcat
就像常规安装一样,因此对 git 存储库的更新不会直接影响它们。
相比之下,常规非 --editable
从 git 源安装:
python -m pip uninstall vcdvcd
python -m pip install --user .
在以下位置生成已安装文件的副本:
~/.local/lib/python3.8/site-packages/vcdvcd
如上所述卸载可编辑包需要一个足够新的 pip,如在: How to uninstall editable packages with pip (installed with -e)
在 Python 3.8、pip 20.0.2、Ubuntu 20.04 中测试。
建议:尽可能直接在树内开发
当您通过另一个项目测试包的补丁时,可编辑设置很有用。
但是,如果您可以完全测试树中的更改,那么就这样做而不是生成更复杂的可编辑安装。
例如,上面的 vcdvcd 包的设置方式是您只需 cd
进入源代码并执行 ./vcdcat
而无需 pip 安装包本身(通常,您可能需要安装依赖项来自 requirements.txt
虽然),以及 import vcdvcd
该可执行文件(或可能是您自己的自定义测试)只是在它所在的同一目录中正确找到包。
原文由 Ciro Santilli OurBigBook.com 发布,翻译遵循 CC BY-SA 4.0 许可协议
pip install -e ./
对原始包修改代码会即刻生效,文档中叫develop mode
-e,--editable <path/url>
Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
跟这个选项对应的是不带这个选项:pip install ./
这样会直接冻结代码,对当前安装的项目改动的就不会修改安装到pip的包,除非重新安装。
4 回答4.5k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
正如手册页所说:
所以当你试图在本地安装一个包时,你会使用它,最常见的情况是你在你的系统上开发它。它只会将包链接到原始位置,基本上意味着对原始包的任何更改都会直接反映在您的环境中。
一些掘金在 这里 和 这里 相同。
一个示例运行可以是:
要么
请注意,第二个是
setup.py
所在位置的完整路径。