私たちはソフトウェア エンジニアとして、さまざまなモジュールやプロジェクト間でコードを再利用していることによく気づきます。しかし、正直に言って、この繰り返しによって課題が生じます。コードを調整または修正する必要がある場合、複数の場所で同じ変更を加えなければなりません。効率と自動化を重視する人にとって、解決策は明らかです。それは、プロジェクト全体でインストールして使用できる別個のパッケージを作成することです。
ただし、機密コードを扱う場合、パッケージを PyPI などのパブリック リポジトリに単純に公開することはできません。代わりに、GitHub や GitLab などのプライベート リポジトリにデプロイする必要があります。このアプローチにより、再利用可能なパッケージの利便性を活用しながら、セキュリティを維持することができます。
このチュートリアルでは、次のプロセスについて説明します。
これらの手順に従うことで、コードの重複を減らし、プロジェクト全体での共有コードのメンテナンスを簡素化することができます。
注: DRY は単に「同じことを繰り返さない」の略ではなく、ライフスタイルの選択でもあります。
まず、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/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}!"
setup.py ファイルはプロジェクトをパッケージ化するために重要です。基本的な例を次に示します:
from .module1 import Hello
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}", } )
要件をインストールします。話を簡単にするために、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
パッケージを公開するには、まず、プロジェクト 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
アクセストークンを作成します:
トークンを取得したら、パッケージをインストールするために必要となるため、安全に保管してください。
次のテンプレートを使用して、マシンにプライベート パッケージをインストールできます:
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 サイトの他の関連記事を参照してください。