`pip install -e`的用例是什么?

时间:2017-03-05 15:05:28

标签: python packaging

当我需要处理我的一个宠物项目时,我只是像往常一样克隆存储库(git clone <url>),编辑我需要的东西,运行测试,更新setup.py版本,提交,推送,构建包并将它们上传到PyPI。

使用pip install -e有什么好处?我应该使用它吗?它将如何改善我的工作流程?

如果这有帮助,这是我目前打包并发送给PyPI的两个宠物项目,但从未使用pip install -e。一个是纯Python,另一个是Django包。

使用pip install -e

如何改善项目的工作流程或结构?

3 个答案:

答案 0 :(得分:27)

在同时开发产品和依赖项时,我发现pip install -e非常有用。

示例:

您使用Django为众多客户构建了网站,并且还开发了内部Django应用,称为 locations ,可在许多项目中重复使用,因此可以在pip上使用它并对其进行版本控制。 / p>

在处理项目时,您将照常安装需求,这会将位置安装到站点程序包中。

但是您很快就会发现位置可以带来一些改进。

因此,您获取了位置存储库的副本并开始进行更改。当然,您需要在Django项目的上下文中测试这些更改。

只需进入您的项目并输入:

pip install -e /path/to/locations/repo

这将使用指向 locations 存储库的符号链接覆盖站点包中的目录,这意味着对其中代码的任何更改都将自动反映-只需重新加载页面即可(只要您重新使用开发服务器)。

符号链接查看目录中的当前文件,这意味着您可以切换分支以查看更改或尝试其他操作等...

另一种选择是创建一个新版本,将其推送至点子,并希望您不要忘记任何东西。如果您有很多这样的内部应用程序,那么这种情况很快就变得难以为继。

答案 1 :(得分:16)

如果要使用pip install -e .运行包并从该文件导入项目的其他模块,则使用python package.py实际上非常有用。该命令使它们可以找到!

它的作用是:

  • 安装site-packages/PackageName.egg-link档案
  • 添加了site-packages/easy-install.pth
  • 的路径
  • 可选择在<venv>/bin
  • 中安装CLI目标

似乎前两个中的任何一个都足够了,后者在开发命令行实用程序时很方便。

答案 2 :(得分:0)

pip install -e是如何通过pip处理setuptools依赖性的。 通常,您要做的是安装依赖项:

  • git clone URL
  • cd project
  • 运行pip install -e .pip install -e .[dev] *

现在应该安装所有依赖项。

* [dev]是setup.py

中需求组的名称

除了setuptools(例如鸡蛋)以外,还有python installation的滚轮系统。 这两个系统都基于不进行任何构建和编译的承诺。