问题描述
我尝试使用 GitLab CI 来自动化包发布过程并将发布存储在 GitLab 包注册表中。我遵循了文档:
https://docs.gitlab.com/ee/user/packages/pypi_repository/
并设法设置 CI,以便它构建并将轮子推送到包注册表。
但是,当有多个管道构建不同版本的包时,我遇到了一个问题,特定于不同的 python 版本。当我在给定版本中有超过 1 个版本的轮子时,似乎包注册表索引与版本不正确匹配,只有上传到注册表的最后一个文件(字面意思是最后一个,按照上传/推送顺序)可用/可以通过pip安装。
这是 GitLab 文档中 mypypipackage
示例的设置 - 扩展:
- 在我的 setup.py 中,我正在“烘焙”python:
import sys
import setuptools
# Set the required version of python.
__python_version__ = "=={}.{}.*".format(sys.version_info.major,sys.version_info.minor)
# Set python tag if building a wheel.
if "bdist_wheel" in sys.argv:
if not any(arg.startswith('--python-tag') for arg in sys.argv):
sys.argv.extend(['--python-tag',"py{}{}".format(sys.version_info.major,sys.version_info.minor)])
setuptools.setup(
name="mypypipackage",version="0.1.3",author="tkornuta",description="A small example package",packages=setuptools.find_packages(),classifiers=[
'Programming Language :: Python :: {}.{}'.format(sys.version_info.major,sys.version_info.minor),"License :: OSI Approved :: MIT License","Operating System :: OS Independent",],python_requires=__python_version__,)
- 我已经设置了 GitLab CI 来为三个不同的 Python 版本/容器构建三个轮子:
python36:
image: "urm.nvidia.com/docker/python:3.6"
script:
- python -c "import sys; print('{}.{}.*'.format(sys.version_info.major,sys.version_info.minor))"
- pip install twine
- python setup.py bdist_wheel
- TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi dist/*
python37:
image: "urm.nvidia.com/docker/python:3.7"
script:
- python -c "import sys; print('{}.{}.*'.format(sys.version_info.major,sys.version_info.minor))"
- pip install twine
- python setup.py bdist_wheel
- TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi dist/*
python38:
image: "urm.nvidia.com/docker/python:3.8"
script:
- python -c "import sys; print('{}.{}.*'.format(sys.version_info.major,sys.version_info.minor))"
- pip install twine
- python setup.py bdist_wheel
- TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi dist/*
- 当 Ci 完成时,我可以在包注册表中清楚地看到这个版本 (0.1.3) 的三个版本的轮子:
(p38) tkornuta@aaa:~$ pip install mypypipackage --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple
Looking in indexes: https://<personal_access_token_name>:****@@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple
Collecting mypypipackage
Downloading https://bbb/mypypipackage-0.1.3-py38-none-any.whl (1.6 kB)
Installing collected packages: mypypipackage
Successfully installed mypypipackage-0.1.3
- 但是当我尝试使用不同的python版本安装wheel时,例如在使用 python 3.7 的 venv 中,pip 抛出错误:
(p37) tkornuta@aaa$ pip install mypypipackage==0.1.3 --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple
Looking in indexes: https://<personal_access_token_name>:****@@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple
ERROR: Could not find a version that satisfies the requirement mypypipackage==0.1.3
ERROR: No matching distribution found for mypypipackage==0.1.3
我已经成功下载并手动安装了 python 3.6 和 3.7 版本的轮子 - 这里没有问题。我也做了一些实验并上传了例如3.7 只有一个轮子 - 并设法直接从包注册表中通过 pip 安装它,没有任何问题。
那我错过了什么?我做错了什么?
这是包注册表的一个问题,它无法为给定的发行版处理/提供给定轮子的多个版本吗?
谢谢, 托马斯
附言。 我也在 gitlab forum 上问过这个问题,希望在这里我可以接触到更广泛的受众,也许有人想出了解决这个问题的方法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)