当前位置: 首页 > 知识库问答 >
问题:

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

薛坚
2023-03-14

什么时候-e--edable选项对pip安装有用?

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

共有3个答案

秦时铭
2023-03-14

在“发展”模式下工作:

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

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

pip安装-e.

虽然有点晦涩,-e--editable的缩写,指的是当前工作目录,所以合在一起意味着以可编辑模式安装当前目录(即您的项目)。

从“开发模式”中对setuptools和distutils内部的一些额外见解:

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

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

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

为此,请使用setup.pyDevelopment命令。它的工作原理与setup.py安装非常相似,只是它实际上没有安装任何东西。相反,它在部署目录中创建一个特殊的. ege-link文件,该文件链接到项目的源代码。而且,如果您的部署目录是Python的site-包目录,它还将更新easy-install.pth文件以包含您的项目的源代码,从而使其在sys.path上可用使用该Python安装的所有程序。

耿永寿
2023-03-14

在开发中使用--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

无法卸载“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,如:如何使用pip卸载可编辑包(与-e一起安装)

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

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

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

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

例如,上面的vcdvcd软件包的设置方式是,您只需将cd插入源代码并执行/vcdcat,而无需pip安装软件包本身(通常,您可能需要从requirements.txt安装依赖项),以及该可执行文件执行的导入vcdvcd(或者您自己的自定义测试)只需在包所在的同一目录中正确地找到包。

袁山
2023-03-14

正如手册页所说:

-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 -e .

或者

pip install -e ~/ultimate-utils/ultimate-utils-proj-src/

请注意,第二个是setup.py所在的完整路径。

 类似资料:
  • 问题内容: 在何时,或选择与有用? 对于某些项目,requirements.txt中的最后一行是。它到底是做什么的? 问题答案: 如手册页所述: 因此,当您尝试在本地安装软件包时,通常会在系统上进行开发时使用此软件包。它将链接软件包到原始位置,基本上意味着对原始软件包的任何更改都将直接反映在您的环境中。 这里和这里的一些掘金都一样。 关于什么:: 例如, / srv / pkg是可在其中找到“ s

  • 我有一个使用Perl:5.22作为基映像的dockerfile: 当我在dockerfile中执行:时,会出现这样的错误,如下所示: 但是,包有一个候选安装程序,但没有候选安装程序 我是Docker的新手;perl 5.22基础映像是否已经与libssl1.0.0一起预装在映像中?我在他们的基本图像中看不到它,其次,*如果没有候选文件可以安装这个包,我如何在我的dockerfile中安装这个包*?

  • 本节概述了 Handlebars 的优缺点。它能够让你了解 Handlebars 是否适合你的实际情况,并使你就是否选择 Handlebars 做出明智的决 定。 关于在浏览器中使用 Handlebars 的注意事项 Handlebars 是一个纯渲染引擎。如果你要允许人们自己编写用于渲染 HTML 页面,电子邮件或者 Markdown 文件的模板,那么使用 Handlebars 效果将会很好。

  • 问题内容: 我刚刚在Java 6 API上看到了这种数据结构,并且很好奇它何时会成为有用的资源。我正在为scjp考试学习,尽管我看到过模拟考试中提到它的内容,但Kathy Sierra的书并未涵盖它。 问题答案: 当您需要一个可以被多个线程访问的排序容器时,ConcurrentSkipListSet和ConcurrentSkipListMap很有用。这些本质上是并发代码的TreeMap和TreeS

  • 问题内容: 在,没有线程安全版本的HashMap命名的ConcurrentHashMap和线程安全版本TreeMap的命名ConcurrentSkipListMap,但没有对HashSet的。 相反,通常有4种使用线程安全的方法: 1所使用的同时实现和线程安全的。 2使用方式,似乎不推荐这种方式。 3是基于并被广泛使用的。 4是基于CopyOnWriteArrayList的,因此它具有的相同基本属

  • 我有一个烧瓶Python 3.7应用程序,我想运行在docker和库伯内特斯。 我有以下Docker文件 这个管用(用蟒蛇蛋) 但这不是(但我想坚持这一点) 运行此命令(构建容器后)给出以下错误 但是如上所述,这与以前的Docker文件非常配合。任何帮助都非常感谢。 附加说明: 构建Docker容器时没有错误 这是我的requirements.txt