极狐gitlab python pypi packages 仓库使用
官方文档:PyPI packages in the Package Registry | GitLab
使用到工具:
pip
twine
限制:
package 包大小最大 5GB
不能多次上传同一 version 的包,会收到 400 错误
创建 package
1.1 创建 python 项目
添加文件
1 2 touch __init__.pytouch greet.py
1 2 3 4 5 6 7 8 def SayHello (): print ("Hello from MyPyPiPackage" ) return from .greet import SayHello
1.2 创建 package
添加 setup.py :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import setuptoolssetuptools.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' , )
执行命令:
1 2 3 4 5 6 7 python3 setup.py sdist bdist_wheel ls distmypypipackage-0.0.1-py3-none-any.whl mypypipackage-0.0.1.tar.gz
下一步就是把目标文件发布的 package 仓库
上传到 package 仓库
上传前需要登陆到极狐gitlab package 仓库,登陆到 package 仓库有 3 种方式:
Personal access tokens 设置 api 权限
Deploy tokens 设置 read_package_registry、write_package_registry 权限
CI job token
2.1 使用 personal access token
创建配置文件 ~/.pypirc:
1 2 3 4 5 6 7 8 [distutils] index-servers = gitlab [gitlab] repository = https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi username = <your_personal_access_token_name> password = <your_personal_access_token>
其中 <project_id> 是项目 url 编码路径,比如 group%2Fproject,也可以是项目 ID
上传到 package 仓库:
1 python3 -m twine upload --repository gitlab dist/*
2.2 使用 deploy token
创建配置文件 ~/.pypirc:
1 2 3 4 5 6 7 8 [distutils] index-servers = gitlab [gitlab] repository = https://gi tlab.example.com/api/ v4/projects/ <project_id>/packages/ pypi username = <deploy token username> password = <deploy token>
其中 <project_id> 是项目 url 编码路径,比如 group%2Fproject,也可以是项目 ID
上传到 package 仓库:
1 python3 -m twine upload --repository gitlab dist/*
2.3 使用 ci job token
.gitlab-ci.yml 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 image: python:latest variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" cache: paths: - .cache/pip/ key: $CI_PROJECT_ID run: script: - pip install twine - python setup.py sdist bdist_wheel - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi --verbose dist/*
当然也可以创建配置文件 ~/.pypirc:
1 2 3 4 5 6 7 8 [distutils] index-servers = gitlab [gitlab] repository = https://gi tlab.example.com/api/ v4/projects/ ${env.CI_PROJECT_ID} /packages/ pypi username = gitlab-ci-token password = ${env.CI_JOB_TOKEN}
2.4 查看上传的 package
项目 > Packages & Registries > Package Registry
注意:上传到项目仓库时,组仓库也是可以看到并使用的
使用 package
从极狐gitlab v14.2 版本开始,如果在 package 未在 package 仓库中找到,则请求会重定向到 pypi.org
当然可以在系统设置中关闭重定向:admin > settings > CI/CD > Package Registry > Forward PyPI package requests to the PyPI Registry if the packages are not found in the GitLab Package Registry
3.1 从项目级别安装
1 2 3 4 5 6 7 8 9 10 11 12 pip install --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple --no-deps pip install mypypipackage --no-deps --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/projects/<your_project_id>/packages/pypi/simple
3.2 从组级别安装
1 2 3 4 5 6 7 8 9 10 11 12 pip install --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/groups/<group_id>/-/packages/pypi/simple --no-deps <package_name> pip install mypypipackage --no-deps --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/groups/<your_group_id>/-/packages/pypi/simple