本文翻译自:How to state in requirements.txt a direct github source
I've installed a library using the command 我已经使用以下命令安装了一个库
pip install git+git://github.com/mozilla/elasticutils.git
which installs it directly from a Github repository. 直接从Github存储库安装它。 This works fine and I want to have that dependency in my requirements.txt
. 这工作正常,我想在我的requirements.txt
具有该依赖关系。 I've looked at other tickets like this but that didn't solve my problem. 我看其他的票像这样但这并没有解决我的问题。 If I put something like 如果我把像
-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev
in the requirements.txt
file, a pip install -r requirements.txt
results in the following output: 在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))
The documentation of the requirements file does not mention links using the git+git
protocol specifier, so maybe this is just not supported. 需求文件的文档没有提及使用git+git
协议说明符的链接,因此也许只是不支持。
Does anybody have a solution for my problem? 有人能解决我的问题吗?
参考:https://stackoom.com/question/17aOm/如何在Requirements-txt中声明直接的github源
“Editable” packages syntax can be used in requirements.txt
to import packages from a variety of VCS (git, hg, bzr, svn) : “可编辑”包语法可被用requirements.txt
到从各种导入包VCS(GIT,HG,BZR,SVN) :
-e git://github.com/mozilla/elasticutils.git#egg=elasticutils
Also, it is possible to point to particular commit: 另外,可以指向特定的提交:
-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils
First, install with git+git
or git+https
, in any way you know. 首先,以您知道的任何方式使用git+git
或git+https
安装。 Example of installing kronok
's branch of the brabeion
project: 安装的例子kronok
的的的分支brabeion
项目:
pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion
Second, use pip freeze > requirements.txt
to get the right thing in your requirements.txt
. 其次,使用pip freeze > requirements.txt
在您的requirements.txt
获得正确的内容。 In this case, you will get 在这种情况下,您将获得
-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master
Third, test the result: 三,测试结果:
pip uninstall brabeion
pip install -r requirements.txt
Since pip v1.5
, (released Jan 1 2014: CHANGELOG , PR ) you may also specify a subdirectory of a git repo to contain your module. 从pip v1.5
(2014年1月1日发布: CHANGELOG , PR ),您还可以指定git repo的子目录来包含您的模块。 The syntax looks like this: 语法如下所示:
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
Note: As a pip module author, ideally you'd probably want to publish your module in it's own top-level repo if you can. 注意:作为pip模块的作者,如果可能的话,理想情况下,您可能希望将模块发布到它自己的顶级仓库中。 Yet this feature is helpful for some pre-existing repos that contain python modules in subdirectories. 但是,此功能对于某些子目录中包含python模块的现有存储库很有帮助。 You might be forced to install them this way if they are not published to pypi too. 如果它们也没有发布到pypi,则可能会被迫以这种方式安装它们。
requirements.txt
allows the following ways of specifying a dependency on a package in a git repository as of pip 7.0: 1 requirements.txt
允许通过以下方式在git pip 7.0及更高版本中指定对git存储库中软件包的依赖关系: 1
[-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 [email protected]:SomeProject#egg=SomeProject
For Github that means you can do (notice the omitted -e
): 对于Github,这意味着您可以执行此操作(注意省略的-e
):
git+git://github.com/mozilla/elasticutils.git#egg=elasticutils
Why the extra answer? 为什么要额外回答?
I got somewhat confused by the -e
flag in the other answers so here's my clarification: 在其他答案中,我对-e
标志有些困惑,所以这是我的澄清:
The -e
or --editable
flag means that the package is installed in
and thus not in the deeply buried
it would otherwise be placed in. 2 -e
或--editable
标志意味着该软件包安装在
,因此不会安装在深埋的
中。放入。2
Documentation 文献资料
Normally your requirements.txt
file would look something like this: 通常,您的requirements.txt
文件如下所示:
package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...
To specify a Github repo, you do not need the package-name==
convention. 要指定Github存储库,您不需要package-name==
约定。
The examples below update package-two
using a GitHub repo. 以下示例使用GitHub存储库更新了第二package-two
。 The text between @
and #
denotes the specifics of the package. @
和#
之间的文本表示软件包的详细信息。
41b95ec
in the context of updated requirements.txt
): 指定提交哈希(在更新的requirements.txt
上下文中为41b95ec
): package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1
master
): 指定分支名称( master
): git+git://github.com/path/to/package-two@master#egg=package-two
0.1
): 指定标签( 0.1
): git+git://github.com/path/to/[email protected]#egg=package-two
3.7.1
): 指定发行版( 3.7.1
): git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two
Note that #egg=package-two
is not a comment here, it is to explicitly state the package name 请注意, #egg=package-two
在这里不是注释,它是明确声明软件包名称
This blog post has some more discussion on the topic. 这篇博客文章对此主题进行了更多讨论。