Python 什么时候-e,--editable选项对pip安装有用?

Python 什么时候-e,--editable选项对pip安装有用?,python,pip,Python,Pip,-e或--editable选项何时对pip安装有用 对于某些项目,requirements.txt中的最后一行是-e.。它具体做什么?如手册所述: -e,--editable <path/url> Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url. -e,--可编辑 从本地项目路径或VCS url以可编辑模式

-e
--editable
选项何时对
pip安装有用


对于某些项目,requirements.txt中的最后一行是
-e.
。它具体做什么?

如手册所述:

-e,--editable <path/url>
     Install a project in editable mode (i.e.  setuptools "develop mode") from a local project path or a VCS url.
-e,--可编辑
从本地项目路径或VCS url以可编辑模式(即setuptools“开发模式”)安装项目。
因此,当您试图在本地安装软件包时,通常在系统上开发软件包时使用此选项。它只是将包链接到原始位置,基本上意味着对原始包的任何更改都将直接反映在您的环境中


一些金块大致相同。

需要注意的是,
pip卸载
可以而不是卸载
pip安装-e一起安装的模块。所以,如果你走这条路,如果你需要卸载的话,要准备好让事情变得非常混乱。部分解决方案是:(1)重新安装,保留已创建文件的记录,如
sudo python3-m setup.py安装——记录已安装的文件.txt
,然后(2)手动删除列出的所有文件,如
sudo rm-r/usr/local/lib/python3.7/dist packages/tdc7201-0.1a2-py3.7.egg/
(适用于模块tdc7201的0.1a2版)。但是,这并不能100%清除所有内容;即使在完成此操作后,导入(已删除!)本地库可能会成功,并且尝试从远程服务器安装相同版本可能会失败(因为它认为您的(已删除!)本地版本已经是最新版本)。

来自:

虽然不是必需的,但在中本地安装项目是很常见的 “可编辑”或“开发”模式,而你的工作。这允许 您的项目将以项目形式安装和编辑

假设您位于项目目录的根目录中,则运行:

pip安装-e.

虽然有点神秘,
-e
--editable
,而
指的是当前工作目录,所以一起,它意味着安装当前目录(即 项目)处于可编辑模式

以下是对setuptools和distutils内部的一些其他见解:

在正常情况下,
distutils
假定您将 构建项目的分发版,不要在其“原始”或 “未构建”表单。如果您以这种方式使用
distutils
,您将 每次创建项目时都必须重新生成和重新安装项目 在开发过程中对其进行更改

distutils
有时会出现的另一个问题是 可能需要同时进行两个相关项目的开发。 您可能需要将两个项目的包放在同一目录中,以便 运行它们,但需要将它们分开以进行修订控制 目的。你怎么能做到这一点

Setuptools允许您部署项目以在公共环境中使用 目录或临时区域,但不复制任何文件 可以在其签出目录中编辑每个项目的代码,并且只需要 在更改项目的C扩展名或 类似的编译文件。您甚至可以将一个项目部署到另一个项目中 项目的签出目录,如果这是您首选的工作方式 (与使用公共独立暂存区或 站点包目录)

为此,请使用
setup.py develope
命令。其工作原理非常类似 安装到
setup.py
,除非它实际上没有安装任何东西。 相反,它会在部署中创建一个特殊的
.egg链接
文件 目录,该目录链接到项目的源代码 部署目录是Python的
站点包
目录,它也将 更新
easy install.pth
文件以包含项目的源代码 代码,从而使所有使用 那是Python安装


在开发中使用
--editable
的具体示例

如果您在中使用:

它输出:

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
无法卸载“vcdvcd”
是正常的:它尝试卸载任何现有的
vcdvcd
,然后用在以下步骤中生成的“类似符号链接的机制”替换它们,但由于没有以前的安装而失败

然后生成一个文件:

~/.local/lib/python3.8/site-packages/vcdvcd.egg-link
其中包括:

/home/ciro/vcdvcd
.
并充当Python解释器的“符号链接”

现在,如果我在
/home/ciro/vcdvcd
下对git源代码进行任何更改,它会自动反映在进口商身上,他们可以从任何目录执行以下操作:

python -c 'import vcdvcd'
但是请注意,至少在我的
pip
版本中,安装了
--editable
的二进制文件,例如该软件包通过
scripts=
setup.py
上提供的
vcdcat
脚本,不会进行符号链接,只会复制到:

~/.local/bin/vcdcat
就像常规安装一样,因此对git存储库的更新不会直接影响它们

相比之下,从git源代码安装的常规非可编辑的

python -m pip uninstall vcdvcd
python -m pip install --user .
在以下位置生成已安装文件的副本:

~/.local/lib/python3.8/site-packages/vcdvcd
如上所述卸载可编辑软件包需要一个足够新的pip,如所述:

在Python3.8、PIP20.0.2和Ubuntu20.04中测试

建议:尽可能直接在树中开发

当您通过另一个项目对包测试修补程序时,可编辑设置非常有用

然而,如果您可以在树中完全测试您的更改,只需这样做,而不是生成更复杂的可编辑安装

例如,vcdvcd包
~/.local/lib/python3.8/site-packages/vcdvcd