【问题标题】:Pip egg name for editable dependency changes用于可编辑依赖项更改的 Pip 鸡蛋名称
【发布时间】:2016-04-25 04:32:48
【问题描述】:

我有一个自定义依赖项,我在 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 的输出写入文件来锁定提交。

【问题讨论】:

    标签: python python-2.7 pip


    【解决方案1】:

    对于这种包,你不应该依赖 pip freeze。它总是会尝试添加一个提交 SHA1 并有效地固定你的包。如果你希望能够更新一个包,你应该编辑你的 requirements.txt 文件中的 git URL 并删除对特定提交的所有引用,只将它指向一个分支名称或一个标签。这会降低性能,因为每次评估 requirements.txt 文件时都必须检查最新版本。

    例如只需将其保留在您的 requirements.txt 中即可:

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

    请注意,我从#egg 中删除了-master:我认为将egg 命名为与项目名称不同的名称不是一个好主意。当我尝试使用另一个名称然后在包的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2012-03-11
      • 2014-11-21
      • 1970-01-01
      • 2012-05-18
      • 2014-05-06
      相关资源
      最近更新 更多