该选项-e或--editable选项何时有用pip install?
对于某些项目,requirements.txt中的最后一行是-e ..它究竟做了什么?
mu *_*u 無 36
正如手册页所说:
-e,--editable <path/url>
Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
Run Code Online (Sandbox Code Playgroud)
因此,在尝试在本地安装软件包时会使用此方法,最常见的情况是在系统上开发软件包时.它只是将包链接到原始位置,基本上意味着对原始包的任何更改都会直接反映在您的环境中.
Cir*_*四事件 20
--editable在开发中使用的具体例子
如果您使用此测试包,如下所示:
cd ~
git clone https://github.com/cirosantilli/vcdvcd
cd vcdvcd
git checkout 5dd4205c37ed0244ecaf443d8106fadb2f9cfbb8
python -m pip install --editable . --user
Run Code Online (Sandbox Code Playgroud)
它输出:
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
Run Code Online (Sandbox Code Playgroud)
这Can't uninstall 'vcdvcd'是正常的:它试图卸载任何现有的vcdvcd,然后用以下步骤中产生的“类似符号链接的机制”替换它们,但由于没有以前的安装而失败。
然后它生成一个文件:
~/.local/lib/python3.8/site-packages/vcdvcd.egg-link
Run Code Online (Sandbox Code Playgroud)
其中包含:
/home/ciro/vcdvcd
.
Run Code Online (Sandbox Code Playgroud)
并充当 Python 解释器的“符号链接”。
所以现在,如果我对 下的 git 源代码进行任何更改/home/ciro/vcdvcd,它会自动反映在可以从任何目录执行以下操作的导入程序上:
python -c 'import vcdvcd'
Run Code Online (Sandbox Code Playgroud)
但是请注意pip,至少在我的版本中,使用 安装的二进制文件--editable,例如vcdcat该包通过scripts=on提供的脚本setup.py,不会获得符号链接,只是复制到:
~/.local/bin/vcdcat
Run Code Online (Sandbox Code Playgroud)
就像常规安装一样,因此对 git 存储库的更新不会直接影响它们。
相比之下,--editable来自 git 源的常规非安装:
python -m pip uninstall vcdvcd
python -m pip install --user .
Run Code Online (Sandbox Code Playgroud)
在以下位置生成已安装文件的副本:
~/.local/lib/python3.8/site-packages/vcdvcd
Run Code Online (Sandbox Code Playgroud)
如上所述卸载可编辑包需要足够新的 pip,如下所述:如何使用 pip 卸载可编辑包(使用 -e 安装)
在 Python 3.8、pip 20.0.2、Ubuntu 20.04 中测试。
建议:尽可能直接在树中开发
当您通过另一个项目测试包的补丁时,可编辑设置非常有用。
但是,如果您可以在树中完全测试您的更改,只需这样做,而不是生成更复杂的可编辑安装。
例如,上面的 vcdvcd 包是以一种方式设置的,您可以直接cd进入源代码,./vcdcat而无需 pip 安装包本身(通常,您可能需要从中安装依赖项requirements.txt),以及该import vcdvcd可执行文件所做的(或者可能是您的自己的自定义测试)只是在它所在的同一目录中正确找到包。
尽管不是必需的,但通常在您处理项目时以“可编辑”或“开发”模式在本地安装您的项目。这允许您的项目以项目形式安装和编辑。
假设您位于项目目录的根目录中,然后运行:
pip install -e .虽然有点神秘,它
-e是 , 的缩写--editable,.指的是当前工作目录,所以放在一起,意味着以可编辑模式安装当前目录(即您的项目)。
“开发模式”中对 setuptools 和 distutils 内部的一些额外见解:
在正常情况下,
distutils假设您要构建项目的发行版,而不是以“原始”或“未构建”形式使用它。如果要使用distutils这种方式,则每次在开发过程中对其进行更改时,都必须重新构建并重新安装项目。有时会出现的另一个问题
distutils是您可能需要同时在两个相关项目上进行开发。您可能需要将两个项目的包放在同一目录中才能运行它们,但需要将它们分开以进行版本控制。你怎么能做到这一点?Setuptools 允许您部署项目以在公共目录或暂存区域中使用,但无需复制任何文件。因此,您可以在其 checkout 目录中编辑每个项目的代码,并且只需要在更改项目的 C 扩展或类似编译文件时运行构建命令。您甚至可以将一个项目部署到另一个项目的 checkout 目录中,如果这是您的首选工作方式(而不是使用公共的独立暂存区或 site-packages 目录)。
为此,请使用该
setup.py develop命令。它的工作原理与 非常相似setup.py install,只是它实际上不安装任何东西。相反,它会.egg-link在部署目录中创建一个特殊文件,该文件链接到您的项目源代码。而且,如果您的部署目录是 Python 的site-packages目录,它还会更新该easy-install.pth文件以包含您项目的源代码,从而使其可sys.path用于使用该 Python 安装的所有程序。
小智 5
这是要注意重要的是pip uninstall 能 不能 卸载已安装了模块pip install -e。因此,如果您沿着这条路线走下去,请做好准备,如果您需要卸载,事情会变得非常混乱。甲局部解决方案是(1)重新安装,保持所创建的文件的记录,如在sudo python3 -m setup.py install --record installed_files.txt手动,然后(2)删除所有文件列出的,如在例如sudo rm -r /usr/local/lib/python3.7/dist-packages/tdc7201-0.1a2-py3.7.egg/(对于模块tdc7201的释放0.1a2)。然而,这并不能 100% 清理所有内容;即使在您完成之后,导入(删除!)本地库可能会成功,并且尝试从远程服务器安装相同版本可能无法执行任何操作(因为它认为您的(已删除!)本地版本已经达到日期)。
| 归档时间: |
|
| 查看次数: |
10346 次 |
| 最近记录: |