VCS 支持

pip 支持从各种版本控制系统 (VCS) 安装。此支持需要一个可用的工作可执行文件(用于正在使用的版本控制系统)。它通过 URL 前缀使用

  • Git -- git+

  • Mercurial -- hg+

  • Subversion -- svn+

  • Bazaar -- bzr+

支持的 VCS

Git

支持的方案是 git+filegit+httpsgit+sshgit+httpgit+gitgit。以下是一些支持的形式

MyProject @ git+ssh://[email protected]/MyProject
MyProject @ git+file:///home/user/projects/MyProject
MyProject @ git+https://git.example.com/MyProject

警告

不建议使用 gitgit+gitgit+http 方案。前两个使用 Git 协议,该协议缺乏身份验证,而 HTTP 由于缺乏基于 TLS 的加密而是不安全的。

也可以指定一个“git ref”,例如分支名称、提交哈希或标签名称

MyProject @ git+https://git.example.com/MyProject.git@master
MyProject @ git+https://git.example.com/[email protected]
MyProject @ git+https://git.example.com/MyProject.git@da39a3ee5e6b4b0d3255bfef95601890afd80709
MyProject @ git+https://git.example.com/MyProject.git@refs/pull/123/head

在传递提交哈希时,指定完整的哈希比部分哈希更可取,因为完整的哈希允许 pip 更有效地运行(例如,通过减少网络调用次数)。

Mercurial

支持的方案是 hg+filehg+httphg+httpshg+sshhg+static-http。以下是一些支持的形式

MyProject @ hg+http://hg.myproject.org/MyProject
MyProject @ hg+https://hg.myproject.org/MyProject
MyProject @ hg+ssh://hg.myproject.org/MyProject
MyProject @ hg+file:///home/user/projects/MyProject

也可以指定修订号、修订哈希、标签名称或本地分支名称

MyProject @ hg+http://hg.example.com/MyProject@da39a3ee5e6b
MyProject @ hg+http://hg.example.com/MyProject@2019
MyProject @ hg+http://hg.example.com/[email protected]
MyProject @ hg+http://hg.example.com/MyProject@special_feature

Subversion

支持的方案是 svnsvn+svnsvn+httpsvn+httpssvn+ssh。以下是一些支持的形式

MyProject @ svn+https://svn.example.com/MyProject
MyProject @ svn+ssh://svn.example.com/MyProject
MyProject @ svn+ssh://[email protected]/MyProject

您也可以为 SVN URL 提供特定修订版,如下所示

-e svn+http://svn.example.com/svn/MyProject/trunk@2019#egg=MyProject
-e svn+http://svn.example.com/svn/MyProject/trunk@{20080101}#egg=MyProject

请注意,您需要使用 可编辑 VCS 安装 才能使用来自 Subversion 的特定修订版。

Bazaar

支持的方案是 bzr+httpbzr+httpsbzr+sshbzr+sftpbzr+ftpbzr+lp。以下是一些支持的形式

MyProject @ bzr+http://bzr.example.com/MyProject/trunk
MyProject @ bzr+sftp://[email protected]/MyProject/trunk
MyProject @ bzr+ssh://[email protected]/MyProject/trunk
MyProject @ bzr+ftp://[email protected]/MyProject/trunk
MyProject @ bzr+lp:MyProject

标签或修订版可以像这样安装

MyProject @ bzr+https://bzr.example.com/MyProject/trunk@2019
MyProject @ bzr+http://bzr.example.com/MyProject/[email protected]

可编辑 VCS 安装

VCS 项目可以以 可编辑模式(使用 --editable 选项)安装,也可以不安装。

  • 默认克隆位置(对于可编辑安装)是

    • <venv path>/src/SomeProject 在虚拟环境中

    • <cwd>/src/SomeProject 对于全局 Python 安装

    可以使用 --src 选项修改此位置。

  • 对于不可编辑的安装,该项目在临时目录中本地构建,然后正常安装。

请注意,如果已经安装了包的满意版本,VCS 源代码不会在没有 --upgrade 标志的情况下覆盖它。此外,pip 会查看包版本和目标修订版以确定对 VCS 需求采取什么操作(而不是提交本身)。

URL 片段

pip 会查看 VCS URL 的 subdirectory 片段,以指定 Python 包的路径,当它不在 VCS 目录的根目录中时。例如:pkg_dir

pip 还会查看 egg 片段,该片段指定“项目名称”。实际上,egg 片段仅在帮助 pip 确定可编辑模式下的 VCS 克隆位置时才需要。在所有其他情况下,egg 片段是不必要的,并且不建议使用它。

egg 片段 **应该** 是一个裸露的 项目名称。其他任何东西都不保证能工作。

示例

如果您的存储库布局是

pkg_dir
├── setup.py  # setup.py for package "pkg"
└── some_module.py
other_dir
└── some_file
some_other_file

然后,要从这个存储库安装,语法应该是

$ python -m pip install "pkg @ vcs+protocol://repo_url/#subdirectory=pkg_dir"
$ python -m pip install "pkg @ vcs+protocol://repo_url/#subdirectory=pkg_dir"
C:> py -m pip install "pkg @ vcs+protocol://repo_url/#subdirectory=pkg_dir"

或者

$ python -m pip install -e "vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir"
$ python -m pip install -e "vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir"
C:> py -m pip install -e "vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir"