1

GitLab CI を使用してパッケージ リリース プロセスを自動化し、リリースを GitLab Package Registry に保存しようとしています。私はドキュメントに従いました:

https://docs.gitlab.com/ee/user/packages/pypi_repository/

CIをセットアップして、ホイールをビルドしてパッケージレジストリにプッシュすることができました。

ただし、異なる python バージョンに固有の、異なるバージョンのパッケージをビルドするパイプラインがいくつかある場合、問題に直面しました。特定のリリースに複数のバージョンの wheel がある場合、Package Registry インデックスがバージョンと正しく一致していないようで、レジストリにアップロードされた最後のファイル (文字通り最後、アップロード/プッシュの順序に従う) のみが利用可能です。 /pip経由でインストールできます。

セットアップは次のmypypipackageとおりです-GitLabドキュメントの例の拡張:

  1. 私の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__,
)
  1. 3 つの異なる Python バージョン/コンテナー用に 3 つのホイールを構築するように GitLab CI をセットアップしました。
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/*
  1. Ci が完了すると、このリリース (0.1.3) のパッケージ レジストリに 3 つのバージョンのホイールがはっきりと表示されます。

ここに画像の説明を入力

  1. 「最新のアップロードされた」ホイール (つまり、python 3.8 の場合) ファイルをインストールすると、正しく動作します。
(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
  1. しかし、python 3.7 の venv など、異なる python バージョンで wheel をインストールしようとすると、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 用のホイールを 1 つだけアップロードしました。また、パッケージ レジストリから pip 経由で問題なくインストールできました。

それで、私は何が欠けていますか?私は何を間違っていますか?

特定のリリースの特定のホイールの多くのバージョンを処理/提供できないのは、Package Registry の問題ですか?

ありがとう、トマシュ

Ps。私はgitlab フォーラムでもこの質問をしました。ここでより多くの聴衆にリーチできることを願っています。誰かがこの問題を解決する方法を見つけたかもしれません。

4

0 に答える 0