これは、GitHubアクションCI/CDを使用して、自動テストとパッケージ公開ワークフローを使用して設定されたPYPI(Pythonパッケージインデックス)パッケージの例です。これは、主にGitHub + VSコード(Windows / Mac / Linux)ユーザー用に作られています。パッケージはスターター /ボイラープレート /デモとして機能する可能性があり、チュートリアルでは、パッケージ /モジュールの名前の混乱やコードテスト構成の問題など、遭遇する可能性のあるいくつかの小さなが迷惑な問題を解決するための迅速かつ簡潔な説明を提供できます。
この例パッケージは、公式のサンプルプロジェクトPypa / SampleProjectに触発されていますが、このパッケージ:
masterまたはmainブランチを押すときにテストされ、リリースを作成するときに公開されますPYTHONPATHに追加するため、テストファイルに糸くずエラーがなく、VSコードでPytestで実行される可能性があります。(上記のボタンをクリックして、このサンプルパッケージを新しいGitHubリポジトリのテンプレートとして使用します。これにより、新しいリポジトリが初期化され、私のコミットはGit履歴にありません)
(GitHubを使用しない場合は、サンプルパッケージのアーカイブをダウンロードできます)
多くの人が同じパッケージとモジュール名を使用しているので、間違いなくそれを行うことができます。しかし、この例パッケージとそのモジュールの名前は異なります: example_pypi_packageとexamplepy 。
Visual Studio Code、 Ctrl + Shift + F (Windows / Linux)またはCMD + Shift + F (MacOS)を備えたexample_pypi_packageフォルダーを開き、両方の名前のすべての発生を見つけ、パッケージとモジュールの名前に置き換えます。また、フォルダーSRC/ExamplePyの名前を変更することも忘れないでください。
簡単かつ非常に大まかに言えば、パッケージ名はpip install <PACKAGENAME>で使用され、モジュール名はimport <MODULENAME>で使用されます。両方の名前は、小文字の基本文字(AZ)で構成する必要があります。あなたが本当に必要な場合、彼らはアンダースコア( _ )を持っているかもしれません。ハイフン - マイナス( - )は使用しないでください。
また、URL「https://pypi.org/project/example-pypi-package/」(すべての_になり-にないパッケージ名で、 example-pypi-package置き換える)を確認する必要があります。
アンダースコア( _ )を使用できますが、そのような使用は落胆します。名前が数字で始まらない場合は数字を使用できますが、そのような使用も落胆します。
数字から始まる名前および/またはハイフン - マイナス( - )を含む名前は使用しないでください。技術的には合法ですが、そのような名前は多くのトラブルを引き起こします - ユーザーはimportlib使用してインポートする必要があります。
pypi.orgのurl "pypi.org/project/example-pypi-package/"と「例-pypi-package」という名前にだまされないでください。 pypi.orgとpipシステムは、すべて_を-に変換し、後者をWebサイト / pipコマンドで使用しますが、本名はまだ_があります。ユーザーはパッケージをインポートするときに使用する必要があります。
サブパッケージが必要な場合に使用する名前空間もあります。
Setup.pyに必要な変更を加えます。
パッケージのバージョン番号__version__はsrc/examplepy/__ init__.pyにあります。あなたはそれを変えたいかもしれません。
サンプルパッケージは、Python 3.6、3.7、3.8、3.9と互換性があるように設計されており、これらのバージョンに対してテストされます。バージョンの範囲を変更する必要がある場合は、次のことを変更する必要があります。
classifiers 、 setup.pyのpython_requiresenvlistmatrix: python: in .github/workflows/test.ymlテスト目的のためにピピの遊び場であるTestPypiにアップロードすることを計画している場合、Twine twine upload --repository testpypi dist/* twine upload --repository pypi dist/*変更します。
PIPはPythonパッケージマネージャーです。 Python 3.4以降のバージョンを使用している場合、既にPIPがあります。これを読んで、PIPがインストールされているかどうかを確認してください。インストールする必要がある場合はこれをお読みください。
Visual Studioコードは今日最も人気のあるコードエディターです。例パッケージは、VSコードで動作するように構成されています。
vsコード拡張機能「Python」をインストールします。
「Python」とコード拡張機能は、Pylintをインストールすることをお勧めします。また、サンプルパッケージは、vs code + python拡張機能を使用してpytestを使用するように構成されているため、pylintとpytestをインストールします。
pip install pylint pytest(おそらくそれらをインストールするように求められる可能性があります。もしそうなら、コマンドを入力して実行する必要はありません)
vscode.envのコンテンツは、Windowsに適したPYTHONPATH=/;src/;${PYTHONPATH}になりました。 LinuxまたはMacOSを使用する場合、 PYTHONPATH=/:src/:${PYTHONPATH}に変更する必要があります( : ;パスが適切に設定されていない場合、テストファイルに糸くずエラーが表示され、pytestがテスト/テスト_*。pyファイルを正しく実行できなくなります。
コードを閉じて再開します。これで、左メニューのラボフラスコアイコンをクリックして、pytestを使用してそこにすべてのテストを実行できます。 Pytestは、標準的なUnittest Frameworkよりも優れunittestいるようです。これは、テストファイルでimport unittestを使用し続けることができます。
例パッケージには、 .editorconfigファイルもあります。ファイルを使用するVSコード拡張機能「EditorConfig for VSコード」をインストールできます。現在の構成を使用するとLF editorConfigツールは、インデントにスペース(.pyの4つのスペース、その他の場合は2つ) UTF-8自動的に使用できます。
VSコードでは、ファイル - >設定 - >設定に移動し、検索ボックスに「Pythonフォーマットプロバイダー」と入力し、3つのPythonコードフォーマットツール(autopep8、black、yapf)のいずれかを選択できます。インストールするように求められます。コードファイルのフォーマットのショートカットは、 Shift + Alt + F (Windows)です。 Shift + Option(alt) + f (macos); Ctrl + Shift + I (Linux)。
src/ examplepy/ ( examplepyモジュール名に置き換えられたはずです)フォルダー、モジュール1.pyの名前を変更して、コードを書き込みます。必要に応じて、モジュール.pyファイルを追加します。
テスト/フォルダーでは、 test_module1.py ( _*。pyをテストする)に名前を変更し、ユニットテストコードを(無限で)書き込みます。必要に応じて、より多くのテスト_*。pyファイルを追加します。
TOXをインストールして実行します:
pip install tox
tox構成では、TOXはCheck-Manifest(git Initializez( git init )を必要とし、少なくともgit add(git add))、setuptoolsのチェックを追加( git add . )、およびpytestを使用した単体テストを使用してソース分布のチェックを実行します。 Check-ManifestとPytestをインストールする必要はありませんが、Toxはそれらを別の環境にインストールします。
自動テストはいくつかのPythonバージョンに対して実行されますが、マシンでは、Python 3.9の場合、Pythonの1つのバージョンのみを使用している場合があります。
tox -e py39ルートディレクトリ( example_pypi_package/ )にさらにファイルを追加する場合、 tox.iniのcheck-manifest --ignoreリストにファイルを追加する必要があります。
setuptoolsとwheelをインストールまたはアップグレードします。
python -m pip install --user --upgrade setuptools wheel ( python3がマシンのコマンドである場合、上記のコマンドでpythonをpython3に変更するか、Linuxでbashを使用する場合は〜/.bashrcまたは〜/.bash_aliaseファイルにalias python=python3を追加します)
dist example_pypi_packageディレクトリから、 distフォルダーでソース分布(SDIST)の生産バージョンを生成するために、次のコマンドを実行します。
python setup.py sdist bdist_wheelオプションで、PypiまたはtestPypiにアップロードする前に、Packageのdistバージョンをローカルにインストールできます。
pip install dist/example_pypi_package-0.1.0.tar.gz(最初に既存のパッケージをアンインストールする必要があるかもしれません:
pip uninstall example_pypi_package同じ名前のインストールされたパッケージがいくつかある可能性があるため、削除するパッケージがなくなると書かれているまで、 pip uninstall複数回実行します。
アカウントをPYPIに登録し、アカウント設定に移動します§APIトークン、「APIトークンの追加」。 Pypiトークンは一度だけ表示され、どこかにコピーします。見逃した場合は、古いトークンを削除して新しいトークンを追加します。
(TestPypiにアップロードする場合は、testPypiアカウントを登録してください)
新しく作成されたまたは既存のGitHubリポジトリのページで、 [設定] - > [secrets] - > [新しいリポジトリの秘密]をクリックします。名前はPYPI_API_TOKENである必要があり、値はpypiトークン( pypi-から始まる)である必要があります。
サンプルパッケージには、自動化されたテストとアップロード(公開)が既にGitHubアクションを使用して設定されています。
git pushまたはプルリクエストがmasterまたはmainブランチに送信されるたびに、パッケージはGitHubアクションを使用して目的のPythonバージョンに対して自動的にテストされます。パッケージがPypiで公開されたら、https://pypi.org/project/example-pypi-package/( _ - )にアクセスしてください。ページにコマンドをコピーし、それを実行してPypiからパッケージをダウンロードしてインストールします。 (またはそれを使用している場合はtest.pypi.org)
pypi.orgでパッケージの説明 / readmeを変更する場合は、新しいバージョンを公開する必要があります。
Twineのインストールまたはアップグレード:
python -m pip install --user --upgrade twine$ home ( 〜 )ディレクトリに.pypircファイルを作成します。そのコンテンツは次のとおりです。
[pypi]
username = __token__
password = <PyPI token> ([ [pypi] [testpypi]を使用する場合は、testpypiにアップロードする場合は使用)
<PyPI token>実際のPypiトークンに置き換えます(これはpypi-から始まります)。
(手動で$ home/.pypircを作成しないと、ユーザー名( __token__ )とパスワード(これはピピトークンである必要があります)を操作するときに求められます)
Twineを実行して、すべてのアーカイブをDISTフォルダーの下にアップロードします。
python -m twine upload --repository pypi dist/ * (TestPypiにアップロードする場合は、 pypiの代わりにtestpypiを使用してください)
パッケージの新しいバージョンの開発が完了したら、次のことをしてください。
src examplepy__init __。pyのバージョン番号__version__変更します。
Distのすべての古いバージョンを削除します。
次のコマンドをもう一度実行して、 distを再生します。
python setup.py sdist bdist_wheel次のコマンドをもう一度実行して、 distをアップロードします。
python -m twine upload --repository pypi dist/ * (必要に応じてpypiの代わりにtestpypi使用してください)
ところで、NPMレジストリにTypeScript(JavaScript)パッケージを公開する場合は、2021年のNPMで公開する準備ができているTypeScriptパッケージの例に移動します。