ホームページ  >  記事  >  バックエンド開発  >  GitHub でプライベート Python パッケージを作成してリリースする

GitHub でプライベート Python パッケージを作成してリリースする

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-20 22:18:30984ブラウズ

導入

私たちはソフトウェア エンジニアとして、さまざまなモジュールやプロジェクト間でコードを再利用していることによく気づきます。しかし、正直に言って、この繰り返しによって課題が生じます。コードを調整または修正する必要がある場合、複数の場所で同じ変更を加えなければなりません。効率と自動化を重視する人にとって、解決策は明らかです。それは、プロジェクト全体でインストールして使用できる別個のパッケージを作成することです。
ただし、機密コードを扱う場合、パッケージを PyPI などのパブリック リポジトリに単純に公開することはできません。代わりに、GitHub や GitLab などのプライベート リポジトリにデプロイする必要があります。このアプローチにより、再利用可能なパッケージの利便性を活用しながら、セキュリティを維持することができます。

このチュートリアルでは、次のプロセスについて説明します。

  1. Python パッケージの作成
  2. プライベート リポジトリ (GitHub) へのパッケージのデプロイ
  3. 仮想環境 (venv) へのパッケージのインストール

これらの手順に従うことで、コードの重複を減らし、プロジェクト全体での共有コードのメンテナンスを簡素化することができます。

注: DRY は単に「同じことを繰り返さない」の略ではなく、ライフスタイルの選択でもあります。

Create and Release a Private Python Package on GitHub

1. プロジェクト構造のセットアップ

まず、Python パッケージの基本的なプロジェクト構造を設定しましょう。

my-package/
├── my_package/
│   ├── __init__.py
│   └── module1.py
├── setup.py
├── build.pipeline.yml
├── requirements.txt
├── .gitignore
├── README.md
├── MANIFEST.in
└── LICENSE

プライベート Python パッケージの構造を詳しく見てみましょう。各ファイルとディレクトリは、パッケージを機能させてインストール可能にする上で重要な役割を果たします。

  • my-package/: これはプロジェクトのルート ディレクトリです。それは、必要なすべての部屋 (ファイル) が含まれる家のようなものです。
  • my_package/: このサブディレクトリには、実際の Python コードが存在します。わかりやすくするために、パッケージと同じ名前が付けられています。
    • __init__.py: このファイルにより、Python はディレクトリをパッケージとして扱います。空にすることも、パッケージの初期化コードを実行することもできます。
    • module1.py: ここにメインコードを置きます。パッケージの複雑さに応じて、複数のモジュール ファイルを使用できます。
  • setup.py: これはパッケージの取扱説明書と考えてください。これには、パッケージに関するメタデータ (名前やバージョンなど) が含まれており、その依存関係がリストされています。このファイルは、パッケージを pip 経由でインストールできるようにするために不可欠です。
  • requirements.txt: このファイルには、プロジェクトが依存するすべての外部 Python パッケージがリストされます。これは pip の買い物リストのようなもので、パッケージを機能させるために何をインストールするかを正確に指示します。
  • README.md: これは私たちのプロジェクトのウェルカムマットです。これは通常、ユーザーが GitHub リポジトリにアクセスしたときに最初に目にするものであるため、パッケージの機能、インストール方法、使用方法を説明するために使用します。
  • .gitignore: このファイルは、Git にどのファイルまたはディレクトリを無視するかを指示します。これは、コンパイルされたコード、一時ファイル、または機密情報をバージョン管理の対象外に保つのに便利です。
  • ライセンス: このファイルは、他の人がパッケージを使用、変更、配布する方法を指定します。これはオープンソース プロジェクトにとって非常に重要であり、私たちの作品を保護するのに役立ちます。
  • MANIFEST.in: このファイルは、パッケージ配布に Python 以外のファイルを含めるために使用されます。含める必要のあるデータ ファイル、ドキュメント、またはその他のリソースがある場合は、ここにリストします。
  • build.pipeline.yml: このファイルは、継続的インテグレーション/継続的デプロイメント (CI/CD) パイプラインを定義します。 GitHub リポジトリに変更をプッシュするときに、テストの実行やパッケージのビルドなどのタスクを自動化します。

2. パッケージコードの作成

パッケージ内に簡単なモジュールを作成しましょう。 my_package/module1.py 内:

my-package/
├── my_package/
│   ├── __init__.py
│   └── module1.py
├── setup.py
├── build.pipeline.yml
├── requirements.txt
├── .gitignore
├── README.md
├── MANIFEST.in
└── LICENSE

my_package/__init__.py で、モジュールをインポートします。

class Hello:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hello, {self.name}!"

3. setup.pyの作成

setup.py ファイルはプロジェクトをパッケージ化するために重要です。基本的な例を次に示します:

from .module1 import Hello

4.requirements.txtの作成

requirements.txt ファイルには、パッケージの構築と配布に必要な依存関係が含まれています。

from setuptools import setup, find_packages

with open('requirements.txt') as f:
    requirements = f.read().splitlines()

setup(
    name="my_package",
    version="0.1",
    include_package_data=True,
    python_requires='>=3.8',
    packages=find_packages(),
    setup_requires=['setuptools-git-versioning'],
    install_requires=requirements,
    author="Abdellah HALLOU",
    author_email="abdeallahhallou33@gmail.com",
    description="A short description of your package",
    long_description=open('README.md').read(),
    long_description_content_type="text/markdown",
    classifiers=[
        "Programming Language :: Python :: 3.8",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    version_config={
       "dirty_template": "{tag}",
    }
)

5. パッケージのビルドとインストール

要件をインストールします。話を簡単にするために、Python 仮想環境を使用します。

setuptools==69.2.0
wheel
twine

パッケージをビルドするには:

python -m venv env
source env/bin/activate # for linux and mac
./env/Scripts/activate # for windows
pip install -r requirements.txt

テストのためにパッケージをローカルにインストールするには:

python setup.py sdist bdist_wheel

.gitignore ファイルを使用すると、作業をコミットしてフォルダーを無視できます:

https://github.com/github/gitignore/blob/main/Python.gitignore

6. タグを使用してパッケージを GitHub に公開します

パッケージを公開するには、まず、プロジェクト my-package/ のルートに build.pipeline.yml ファイルを作成し、コミットします。デプロイメントは、以前にインストールしたライブラリであるtwineを使用して行われます。

my-package/
├── my_package/
│   ├── __init__.py
│   └── module1.py
├── setup.py
├── build.pipeline.yml
├── requirements.txt
├── .gitignore
├── README.md
├── MANIFEST.in
└── LICENSE

モジュールのインストールに Python 以外のファイルを含める必要がある場合は、MANIFEST.in ファイルを使用できます。このファイルは、パッケージ配布にどの追加ファイルを含める必要があるかを指定します。

class Hello:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hello, {self.name}!"

次に、パッケージをアップロードします:

from .module1 import Hello

7. パッケージをインストールします

アクセストークンを作成します:

  • [設定] > [設定] に移動します。開発者設定 > 個人アクセス トークン (クラシック) > 新しいトークンを生成します.
  • write:packages スコープを確認して、必要な権限を付与してください。

トークンを取得したら、パッケージをインストールするために必要となるため、安全に保管してください。

次のテンプレートを使用して、マシンにプライベート パッケージをインストールできます:

from setuptools import setup, find_packages

with open('requirements.txt') as f:
    requirements = f.read().splitlines()

setup(
    name="my_package",
    version="0.1",
    include_package_data=True,
    python_requires='>=3.8',
    packages=find_packages(),
    setup_requires=['setuptools-git-versioning'],
    install_requires=requirements,
    author="Abdellah HALLOU",
    author_email="abdeallahhallou33@gmail.com",
    description="A short description of your package",
    long_description=open('README.md').read(),
    long_description_content_type="text/markdown",
    classifiers=[
        "Programming Language :: Python :: 3.8",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    version_config={
       "dirty_template": "{tag}",
    }
)

結論

よくわかりました。GitHub で Python を使用して独自のプライベート パッケージを作成してデプロイする方法がわかりました。

Github リポジトリのリンク: https://github.com/ABDELLAH-Hallou/Private-Python-Package-Deployment

以上がGitHub でプライベート Python パッケージを作成してリリースするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。