# GitLab PyPi Repository > 原文:[https://docs.gitlab.com/ee/user/packages/pypi_repository/](https://docs.gitlab.com/ee/user/packages/pypi_repository/) * [Setting up your development environment](#setting-up-your-development-environment) * [Enabling the PyPi Repository](#enabling-the-pypi-repository) * [Getting started](#getting-started) * [Create a project](#create-a-project) * [Create a package](#create-a-package) * [Adding the GitLab PyPi Repository as a source](#adding-the-gitlab-pypi-repository-as-a-source) * [Authenticating with a personal access token](#authenticating-with-a-personal-access-token) * [Authenticating with a deploy token](#authenticating-with-a-deploy-token) * [Uploading packages](#uploading-packages) * [Upload packages with Twine](#upload-packages-with-twine) * [Install packages](#install-packages) # GitLab PyPi Repository[](#gitlab-pypi-repository-premium "Permalink") [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/208747) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.10. 使用 GitLab PyPi 信息库,每个项目都可以有自己的空间来存储 PyPi 软件包. GitLab PyPi 存储库可用于: * [pip](https://s0pypi0org.icopy.site/project/pip/) * [twine](https://s0pypi0org.icopy.site/project/twine/) ## Setting up your development environment[](#setting-up-your-development-environment "Permalink") 您将需要最新版本的[pip](https://s0pypi0org.icopy.site/project/pip/)和[twine](https://s0pypi0org.icopy.site/project/twine/) . ## Enabling the PyPi Repository[](#enabling-the-pypi-repository "Permalink") **注意:**仅当您的 GitLab 管理员[启用了对 Package Registry 的支持时,](../../../administration/packages/index.html)此选项才可用. 启用 PyPi 储存库后,默认情况下它将可用于所有新项目. 要为现有项目启用它,或者要禁用它: 1. 导航到项目的**"设置">"常规">"可见性,项目功能,权限"** . 2. 找到"软件包"功能并启用或禁用它. 3. 单击**保存更改**以使更改生效. 然后,您应该能够在左侧栏中看到" **程序包和注册表"**部分. ## Getting started[](#getting-started "Permalink") 本节将介绍如何创建一个新的示例 PyPi 包进行上传. 这是测试**GitLab PyPi Registry**的快速入门. 如果您已经了解如何构建和发布自己的软件包,请继续[下一节](#adding-the-gitlab-pypi-repository-as-a-source) . ### Create a project[](#create-a-project "Permalink") 了解如何创建完整的 Python 项目不在本指南的范围内,但是您可以创建一个小包来测试注册表. 首先创建一个名为`MyPyPiPackage`的新目录: ``` mkdir MyPyPiPackage && cd MyPyPiPackage ``` 创建此目录后,在其中创建另一个目录: ``` mkdir mypypipackage && cd mypypipackage ``` 在此目录中创建两个新文件以设置基本项目: ``` touch __init__.py touch greet.py ``` 在`greet.py` ,添加以下代码: ``` def SayHello(): print("Hello from MyPyPiPackage") return ``` 在`__init__.py`文件中,添加以下内容: ``` from .greet import SayHello ``` 现在,我们的项目基础已经完成,我们可以测试代码是否运行. 在顶部`MyPyPiPackage`目录中启动 Python 提示符. 然后运行: ``` >>> from mypypipackage import SayHello >>> SayHello() ``` 您应该看到类似于以下内容的输出: ``` Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from mypypipackage import SayHello >>> SayHello() Hello from MyPyPiPackage ``` 验证示例项目是否按上述要求工作后,接下来就可以创建包了. ### Create a package[](#create-a-package "Permalink") 在您的`MyPyPiPackage`目录中,我们需要创建一个`setup.py`文件. 运行以下命令: ``` touch setup.py ``` 该文件包含有关我们软件包的所有信息. 有关此文件的更多信息,请参见[创建 setup.py](https://packaging.python.org/tutorials/packaging-projects/#creating-setup-py) . 对于本指南,我们不需要大量填写此文件,只需将以下内容添加到您的`setup.py` : ``` import setuptools setuptools.setup( name="mypypipackage", version="0.0.1", author="Example Author", author_email="author@example.com", description="A small example package", packages=setuptools.find_packages(), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], python_requires='>=3.6', ) ``` 保存文件,然后执行如下设置: ``` python3 setup.py sdist bdist_wheel ``` 如果成功,您应该能够在新创建的`dist`文件夹中看到输出. 跑: ``` ls dist ``` 并确认您的输出与以下内容匹配: ``` mypypipackage-0.0.1-py3-none-any.whl mypypipackage-0.0.1.tar.gz ``` 现在,我们的软件包已全部设置好,可以上传到**GitLab PyPi 软件包注册中心** . 在此之前,我们接下来需要设置身份验证. ## Adding the GitLab PyPi Repository as a source[](#adding-the-gitlab-pypi-repository-as-a-source "Permalink") ### Authenticating with a personal access token[](#authenticating-with-a-personal-access-token "Permalink") 您将需要以下内容: * 个人访问令牌. 您可以生成范围设置为`api`的[个人访问令牌](../../../user/profile/personal_access_tokens.html) ,以进行存储库身份验证. * 您的来源的合适名称. * 您的项目 ID,可以在项目的主页上找到. 编辑`~/.pypirc`文件并添加以下内容: ``` [distutils] index-servers = gitlab [gitlab] repository = https://gitlab.com/api/v4/projects//packages/pypi username = __token__ password = ``` ### Authenticating with a deploy token[](#authenticating-with-a-deploy-token "Permalink") 您将需要以下内容: * 部署令牌. 您可以生成[令牌部署](./../../project/deploy_tokens/index.html)与`read_package_registry`和/或`write_package_registry`范围为存储库认证. * 您的来源的合适名称. * 您的项目 ID,可以在项目的主页上找到. 编辑`~/.pypirc`文件并添加以下内容: ``` [distutils] index-servers = gitlab [gitlab] repository = https://gitlab.com/api/v4/projects//packages/pypi username = password = ``` ## Uploading packages[](#uploading-packages "Permalink") 上载套件时,请注意: * 允许的最大大小为 50 MB. * 如果您多次上传具有相同版本的相同程序包,则每次连续上传都将保存为单独的文件. 安装软件包时,GitLab 将提供最新文件. ### Upload packages with Twine[](#upload-packages-with-twine "Permalink") 如果您按照上面的指南进行操作,则`MyPyPiPackage`软件包应已准备好上载. 运行以下命令: ``` python3 -m twine upload --repository gitlab dist/* ``` 如果成功,您应该看到以下内容: ``` Uploading distributions to https://gitlab.com/api/v4/projects//packages/pypi Uploading mypypipackage-0.0.1-py3-none-any.whl 100%|███████████████████████████████████████████████████████████████████████████████████████████| 4.58k/4.58k [00:00<00:00, 10.9kB/s] Uploading mypypipackage-0.0.1.tar.gz 100%|███████████████████████████████████████████████████████████████████████████████████████████| 4.24k/4.24k [00:00<00:00, 11.0kB/s] ``` 这表明该软件包已成功上传. 然后,您可以导航到项目的" **程序包和注册表"**页面,并查看上载的程序包. 如果您没有遵循上述指南,则需要确保已正确构建[软件包,并使用 setuptools 创建了 PyPi 软件包](https://packaging.python.org/tutorials/packaging-projects/) . 然后,您可以使用以下命令上传软件包: ``` python -m twine upload --repository dist/ ``` Where: * `` is your package filename, ending in `.tar.gz` or `.whl`. * ``是[安装过程中使用](#adding-the-gitlab-pypi-repository-as-a-source)的[源名称](#adding-the-gitlab-pypi-repository-as-a-source) . ## Install packages[](#install-packages "Permalink") 使用以下命令安装最新版本的软件包: ``` pip install --index-url https://__token__:@gitlab.com/api/v4/projects//packages/pypi/simple --no-deps ``` Where: * ``是软件包名称. * ``是具有`read_api`范围的个人访问令牌. * ``是项目 ID. 如果您遵循上面的指南,并且想测试安装`MyPyPiPackage`软件包,则可以运行以下命令: ``` pip install mypypipackage --no-deps --index-url https://__token__:@gitlab.com/api/v4/projects//packages/pypi/simple ``` 这将导致以下结果: ``` Looking in indexes: https://__token__:****@gitlab.com/api/v4/projects//packages/pypi/simple Collecting mypypipackage Downloading https://gitlab.com/api/v4/projects//packages/pypi/files/d53334205552a355fee8ca35a164512ef7334f33d309e60240d57073ee4386e6/mypypipackage-0.0.1-py3-none-any.whl (1.6 kB) Installing collected packages: mypypipackage Successfully installed mypypipackage-0.0.1 ```