Pip egg name用于可编辑的依赖项更改

时间:2016-01-19 15:55:44

标签: python python-2.7 pip

我有一个自定义依赖项,我在requirements.txt中使用-e标志指定:

...
-e git+git@git.myproject/projectname.git@master#egg=projectname-master
...

有了这个pip install -r requirements.txt就可以了。

pip freeze提供以下输出:

...
-e git+git@git.myproject/projectname.git@b3d61ba97029316b5790a6d0328d59816262153d#egg=projectname-master
...

这就是我所期望的。

运行pip install --upgrade -r requirements.txt后跟pip freeze但是我得到以下输出。

...
-e git+git@git.myproject/projectname.git@4c58322b1750d6c3d2bde67f8a1657a09c45dbb9#egg=projectname-origin_HEAD
...

请注意,此处的鸡蛋名称已更改。

pip freeze的输出写入requirements.txt文件并运行pip install -r requirements时,出现以下错误:

Could not find a version that satisfies the requirement projectname-master (from projectname-origin-HEAD->-r requirements.txt (line 13)) (from  versions: )

如何阻止pip在升级时弄乱eggname。这是必要的,因为我希望能够通过将pip freeze的输出写入文件来锁定提交。

1 个答案:

答案 0 :(得分:0)

对于这种包装,你不应该依赖pip冻结。它总是会尝试添加提交SHA1并有效地固定您的包。如果您希望能够更新包,则应编辑requirements.txt文件中的git URL并删除对特定提交的所有引用,仅将其指向分支名称或标记。每次对requirements.txt文件进行评估时,都会产生性能损失,必须检查最新版本。

E.g。只需将其保留在您的requirements.txt中:

-e git+git@git.myproject/projectname.git@master#egg=projectname

请注意,我从#egg中删除了--master:我认为将鸡蛋命名为与项目名称不同的是一个好主意。当我尝试使用另一个名称然后在包的setup.py中指定的名称时,当pip install teh packages我得到这样的警告:

Running setup.py -> Warning :: egg_info for package projectname-master produced metadata for project name projectname. Fix your #egg=projectname-master fragments.

可以在这里找到更多细节: http://codeinthehole.com/tips/using-pip-and-requirementstxt-to-install-from-the-head-of-a-github-branch/

在这里: https://pip.readthedocs.io/en/1.1/requirements.html