什么时候-e
或--edable
选项对pip安装
有用?
对于某些项目,requirements.txt中的最后一行是-e.
。它到底做什么?
在“发展”模式下工作:
虽然不是必需的,但在处理项目时,以“可编辑”或“开发”模式本地安装项目是很常见的。这允许您的项目以项目形式安装和可编辑。
假设您位于项目目录的根目录中,则运行:
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安装的所有程序。
在开发中使用--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
(或者您自己的自定义测试)只需在包所在的同一目录中正确地找到包。
正如手册页所说:
-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
我有一个烧瓶Python 3.7应用程序,我想运行在docker和库伯内特斯。 我有以下Docker文件 这个管用(用蟒蛇蛋) 但这不是(但我想坚持这一点) 运行此命令(构建容器后)给出以下错误 但是如上所述,这与以前的Docker文件非常配合。任何帮助都非常感谢。 附加说明: 构建Docker容器时没有错误 这是我的requirements.txt
问题内容: 在,没有线程安全版本的HashMap命名的ConcurrentHashMap和线程安全版本TreeMap的命名ConcurrentSkipListMap,但没有对HashSet的。 相反,通常有4种使用线程安全的方法: 1所使用的同时实现和线程安全的。 2使用方式,似乎不推荐这种方式。 3是基于并被广泛使用的。 4是基于CopyOnWriteArrayList的,因此它具有的相同基本属