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

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

Oct 20, 2024 pm 10:18 PM

導入

私たちはソフトウェア エンジニアとして、さまざまなモジュールやプロジェクト間でコードを再利用していることによく気づきます。しかし、正直に言って、この繰り返しによって課題が生じます。コードを調整または修正する必要がある場合、複数の場所で同じ変更を加えなければなりません。効率と自動化を重視する人にとって、解決策は明らかです。それは、プロジェクト全体でインストールして使用できる別個のパッケージを作成することです。
ただし、機密コードを扱う場合、パッケージを 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間でどのくらいのPythonを学ぶことができますか? 2時間でどのくらいのPythonを学ぶことができますか? Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間のPython計画:現実的なアプローチ 2時間のPython計画:現実的なアプローチ Apr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Python:主要なアプリケーションの調査 Python:主要なアプリケーションの調査 Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:汎用性の高いプログラミングの力 Python:汎用性の高いプログラミングの力 Apr 17, 2025 am 12:09 AM

Pythonは、初心者から上級開発者までのすべてのニーズに適した、そのシンプルさとパワーに非常に好まれています。その汎用性は、次のことに反映されています。1)学習と使用が簡単、シンプルな構文。 2)Numpy、Pandasなどの豊富なライブラリとフレームワーク。 3)さまざまなオペレーティングシステムで実行できるクロスプラットフォームサポート。 4)作業効率を向上させるためのスクリプトおよび自動化タスクに適しています。

See all articles