我已经使用命令安装了一个库
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协议说明符的链接,所以这可能是不支持的。
有人能解决我的问题吗?
通常你的requirements.txt文件看起来是这样的:
package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...
要指定一个Github回购,你不需要package-name==约定。
下面的例子使用GitHub回购更新package- 2。@和#之间的文本表示包的细节。
指定提交散列(41b95ec在更新的requirements.txt上下文中):
package-one==1.9.4
git+https://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1
指定分支名称(master):
git+https://github.com/path/to/package-two@master#egg=package-two
指定标签(0.1):
git+https://github.com/path/to/package-two@0.1#egg=package-two
指定版本(3.7.1):
git+https://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two
注意,#egg=package-two在这里不是注释,而是显式地声明包的名称
这篇博客文章对这个话题有更多的讨论。
通常你的requirements.txt文件看起来是这样的:
package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...
要指定一个Github回购,你不需要package-name==约定。
下面的例子使用GitHub回购更新package- 2。@和#之间的文本表示包的细节。
指定提交散列(41b95ec在更新的requirements.txt上下文中):
package-one==1.9.4
git+https://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1
指定分支名称(master):
git+https://github.com/path/to/package-two@master#egg=package-two
指定标签(0.1):
git+https://github.com/path/to/package-two@0.1#egg=package-two
指定版本(3.7.1):
git+https://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two
注意,#egg=package-two在这里不是注释,而是显式地声明包的名称
这篇博客文章对这个话题有更多的讨论。
我发现让pip3 (v9.0.1版本,由Ubuntu 18.04的包管理器安装)实际安装我告诉它安装的东西有点棘手。我发布这个答案是为了节省遇到这个问题的人的时间。
将此放入requirements.txt文件失败:
git+git://github.com/myname/myrepo.git@my-branch#egg=eggname
我所说的“失败”是指当它从Git下载代码时,它最终安装了在PyPi上找到的原始版本的代码,而不是在该分支上的repo中的代码。
然而,安装提交而不是安装分支名称是有效的:
git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname
Requirements.txt允许以以下方式指定对PIP 7.0:1的git存储库中的包的依赖项
[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject (deprecated as of Jan 2020)
对于Github,这意味着你可以做(注意省略的-e):
git+git://github.com/mozilla/elasticutils.git#egg=elasticutils
为什么要多一个答案?
我对其他答案中的-e标志有点困惑,所以这里是我的澄清:
-e或——editable标志意味着包安装在<venv path>/src/SomeProject中,而不是深埋的<venv path>/lib/pythonX中。X/site-packages/SomeProject,否则它将被放置在2中
文档
1 https://pip.readthedocs.org/en/stable/reference/pip_install/#git
2 https://pip.readthedocs.org/en/stable/reference/pip_install/#vcs-support