我已经使用命令安装了一个库

pip install git+git://github.com/mozilla/elasticutils.git

它直接从Github存储库安装。这工作得很好,我想在我的需求。txt的依赖。我看了其他类似的票,但这并没有解决我的问题。如果我放

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

在requirements.txt文件中,PIP install -r requirements.txt的结果如下:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

需求文件的文档没有提到使用git+git协议说明符的链接,所以这可能是不支持的。

有人能解决我的问题吗?


当前回答

首先,安装git+git或git+https,以任何你知道的方式。安装brabeion项目kronok分支的例子:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

其次,使用pip freeze > requirements.txt在requirements.txt中获取正确的内容。在这种情况下,你会得到

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

第三,检验结果:

pip uninstall brabeion
pip install -r requirements.txt

其他回答

自pip v1.5(2014年1月1日发布:CHANGELOG, PR)以来,您还可以指定git repo的子目录来包含您的模块。语法如下所示:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

注意:作为pip模块的作者,理想情况下,如果可以的话,您可能希望在它自己的顶级回购中发布您的模块。然而,这个特性对于一些在子目录中包含python模块的现有回购是有帮助的。如果它们没有发布到pypi,那么您可能会被迫以这种方式安装它们。

这似乎也是一种有效的格式:

gym-tictactoe @ git+https://github.com/haje01/gym-tictactoe.git@84e22fc28fe192ba0040bdd56a697f63d3d4a3d5

如果您执行pip install“git+https://github.com/haje01/gym-tictactoe.git”,然后查看通过运行pip freeze安装了什么,您将看到以这种格式描述的包,并可以复制并粘贴到requirements.txt中。

“可编辑的”包语法可以在requirements.txt中使用,从各种VCS (git, hg, bzr, svn)导入包:

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

同样,也可以指向特定的commit:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

Github有zip端点,在我看来比使用git协议更可取。优点是:

您不必指定#egg=<项目名称> Git不需要安装在您的环境中,这对于容器化环境很好 它与pip散列和缓存一起工作得更好 URL结构更容易记住,更容易被发现

你通常希望requirements.txt的条目看起来像这样,例如没有-e前缀:

https://github.com/org/package/archive/1a58aa586efd4bca37f2cfb9d9348958986aab6c.tar.gz

从主分支安装:

https://github.com/org/package/archive/main.tar.gz

还有一个等效的.zip端点,但在一个评论中报告说,总是使用.tar.gz端点可以避免unicode包名的问题。

对于私有存储库,我发现这两个对我来说很好:

pip install https://${GITHUB_TOKEN}@github.com/owner/repo/archive/main.tar.gz

其中main.tar.gz指的是回购的主分支,可以用其他分支名称替换。有关更多信息和使用最新的Github API请参阅这里:

pip install https://${GITHUB_TOKEN}@api.github.com/repos/owner/repo/tarball/master

如果您已经安装了git并且可用,那么

pip install git+https://${GITHUB_TOKEN}@github.com/owner/repo.git@main

实现了相同的功能,并且还允许通过添加@branch或@tag或@commit-hash来实现更大的灵活性。然而,这种方法实际上是将回购复制到本地临时文件夹中,这可能会花费大量的时间。

你也可以使用requirements.txt中的url。