PyPI API

本文是 PyPI 软件包的 API 文档。

caution此 API 由 PyPI 软件包管理器客户端使用并且通常不适合手动使用。

有关如何从极狐GitLab 软件包库上传和安装 PyPI 包的说明,请参阅 PyPI 软件包库文档

note这些端点不遵守标准的 API 身份验证方法。 有关支持的 Header 和令牌类型的详细信息,请参阅 PyPI 软件包库文档
note当启用 FIPS 模式时,推荐使用 Twine 3.4.2 或更高版本。

从群组下载软件包文件

引入于极狐GitLab 13.12。

下载 PyPI 包文件。 简单 API 通常提供此 URL。

GET groups/:id/packages/pypi/files/:sha256/:file_identifier
参数 类型 是否必需 描述
id string yes 群组的 ID 或完整路径
sha256 string yes PyPI 软件包文件的 sha256 校验和
file_identifier string yes PyPI 软件包文件的名称
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/groups/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz"

将输出写入文件:

curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/groups/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz" >> my.pypi.package-0.0.1.tar.gz

将下载文件写入当前目录的 my.pypi.package-0.0.1.tar.gz

群组级的简单 API 索引

引入于极狐GitLab 15.1。

将群组中的软件包列表返回为 HTML 文件:

GET groups/:id/-/packages/pypi/simple
参数 类型 是否必需 描述
id string yes 群组的 ID 或完整路径
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple"

响应示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Links for Group</title>
  </head>
  <body>
    <h1>Links for Group</h1>
    <a href="https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple/my-pypi-package" data-requires-python="">my.pypi.package</a><br><a href="https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple/package-2" data-requires-python="3.8">package_2</a><br>
  </body>
</html>

将输出写入文件:

curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple" >> simple_index.html

将下载文件写入当前目录的 simple_index.html

群组级别的简单 API 条目点

引入于极狐GitLab 13.12。

将软件包描述符返回为 HTML 文件:

GET groups/:id/-/packages/pypi/simple/:package_name
参数 类型 是否必需 描述
id string yes 群组的 ID 或完整路径
package_name string yes 软件包名称
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple/my.pypi.package"

响应示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Links for my.pypi.package</title>
  </head>
  <body>
    <h1>Links for my.pypi.package</h1>
    <a href="https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1-py3-none-any.whl#sha256=5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff" data-requires-python="&gt;=3.6">my.pypi.package-0.0.1-py3-none-any.whl</a><br><a href="https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/files/9s9w01b0bcd52b709ec052084e33a5517ffca96f7728ddd9f8866a30cdf76f2/my.pypi.package-0.0.1.tar.gz#sha256=9s9w011b0bcd52b709ec052084e33a5517ffca96f7728ddd9f8866a30cdf76f2" data-requires-python="&gt;=3.6">my.pypi.package-0.0.1.tar.gz</a><br>
  </body>
</html>

将输出写入文件:

curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple/my.pypi.package" >> simple.html

将下载文件写入当前目录的 simple.html

从项目下载软件包文件

引入于极狐GitLab 12.10。

下载 PyPI 软件包文件。简单的 API 通常提供此 URL。

GET projects/:id/packages/pypi/files/:sha256/:file_identifier
参数 类型 是否必需 描述
id string yes 项目的 ID 或完整路径
sha256 string yes PyPI 软件包文件 sha256 校验和
file_identifier string yes PyPI 软件包文件名
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz"

将输出写入文件:

curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz" >> my.pypi.package-0.0.1.tar.gz

将下载文件写入当前目录的 my.pypi.package-0.0.1.tar.gz

项目级的简单 API 索引

引入于极狐GitLab 15.1。

将项目中的软件包列表返回为 HTML 文件:

GET projects/:id/packages/pypi/simple
参数 类型 是否必需 描述
id string yes 项目的 ID 或完整路径
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple"

响应示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Links for Project</title>
  </head>
  <body>
    <h1>Links for Project</h1>
    <a href="https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple/my-pypi-package" data-requires-python="">my.pypi.package</a><br><a href="https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple/package-2" data-requires-python="3.8">package_2</a><br>
  </body>
</html>

将输出写入文件:

curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple" >> simple_index.html

将下载文件写入当前目录的 simple_index.html

项目级的简单 API 条目点

引入于极狐GitLab 12.10。

将软件包描述符返回为 HTML 文件:

GET projects/:id/packages/pypi/simple/:package_name
参数 类型 是否必需 描述
id string yes 项目的 ID 或完整路径
package_name string yes 软件包名称
curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple/my.pypi.package"

响应示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Links for my.pypi.package</title>
  </head>
  <body>
    <h1>Links for my.pypi.package</h1>
    <a href="https://gitlab.example.com/api/v4/projects/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1-py3-none-any.whl#sha256=5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff" data-requires-python="&gt;=3.6">my.pypi.package-0.0.1-py3-none-any.whl</a><br><a href="https://gitlab.example.com/api/v4/projects/1/packages/pypi/files/9s9w01b0bcd52b709ec052084e33a5517ffca96f7728ddd9f8866a30cdf76f2/my.pypi.package-0.0.1.tar.gz#sha256=9s9w011b0bcd52b709ec052084e33a5517ffca96f7728ddd9f8866a30cdf76f2" data-requires-python="&gt;=3.6">my.pypi.package-0.0.1.tar.gz</a><br>
  </body>
</html>

将输出写入文件:

curl --user <username>:<personal_access_token> "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple/my.pypi.package" >> simple.html

将下载文件写入当前目录的 simple.html

上传软件包

上传 PyPI 软件包:

PUT projects/:id/packages/pypi
参数 类型 是否必需 描述
id string yes 项目的 ID 或完整路径
requires_python string no 必需的 PyPI 版本
curl --request POST \
     --form 'content=@path/to/my.pypi.package-0.0.1.tar.gz' \
     --form 'name=my.pypi.package'
     --form 'version=1.3.7'
     --user <username>:<personal_access_token> \
     "https://gitlab.example.com/api/v4/projects/1/packages/pypi"