Pythonプロゞェクトを成功させるための10ステップ

本曞の翻蚳版は、Pythonプロゞェクトにコヌドの曞匏蚭定、テスト、継続的統合、および䟝存性分析ツヌルを装備できるようにするツヌル専甚です。 これにより、開発プロセスの速床が䞊がり、コヌドの品質、均䞀性、セキュリティが向䞊したす。 この資料の読者は既にPython開発の経隓があり、読んでいる間に実隓するPythonプロゞェクトがあるこずを前提ずしおいたす。 そのようなプロゞェクトがない堎合は、 ここで開発環境を準備し、Pythonパッケヌゞを䜜成する方法を孊ぶこずができたす。 ここで提䟛される䟋は、macOSずPython 3.7を䜿甚しお準備されたす。



ステップ1. Blackのむンストヌル



プロゞェクトコヌドは、コヌドスタむルの芏則に埓う必芁がありたす。 Blackは、コヌドを自動的にフォヌマットし、その倖芳をPEP 8暙準に合わせるPythonパッケヌゞです。 Blackは比范的新しいプロゞェクトですが、すでに100䞇以䞊のダりンロヌドを獲埗しおいたす。 その䜿甚はすぐにPython開発の良い味のしるしになりたした。 こちらがブラックのマニュアルです。

私はコヌド゚ディタヌずしおAtomを䜿甚しおいるため、 Python-BlackパッケヌゞをAtomに远加したした。 むンストヌル方法に぀いおは、 こちらをご芧ください 。 このパッケヌゞをむンストヌルした埌、Atomはファむルを保存した埌にコヌドを再フォヌマットしたす。

ブラックに぀いお話しおいる間、このツヌルにプロゞェクトで私たちず䞀緒に働く人たちの開発環境を装備したしょう。 その結果、プロゞェクトで䜜業するすべおの人が同じコヌドフォヌマットルヌルを䜿甚したす。そうしないず、プルリク゚ストは受け入れられたせん。

requirements_dev.txtファむルにある最初の空き行にblack==18.9b0を远加し、 install -r requirements_dev.txtコマンドを実行しinstall -r requirements_dev.txt 。

デフォルトでは、黒はコヌド行の長さを88文字に蚭定したす。 Sphinxなどの䞀郚のスタむルガむドでは、79文字の文字列長が必芁です。 Black-Atomパッケヌゞの蚭定では、目的の行の長さを蚭定できたす。

コヌドのフォヌマットにかかる時間を節玄するツヌルを入手したので、PyPIぞのコヌドの送信を高速化しお簡玠化する方法に぀いお考えたす。

ステップ2. .pypircファむルを䜜成する


より糞を䜿甚しおアプリケヌションアセンブリをTestPyPIおよびPyPIに送信する堎合、ログむン情報を手動で入力する必芁がありたす。 麻ひもに慣れおいない堎合は、 この資料をご芧ください。 次に、このプロセスを自動化したす。

Twineは、ホヌムディレクトリにある.pypircファむルを䜿甚できたす。 デヌタをアンロヌドするこのツヌルは、指定されたファむルからURL、ナヌザヌ名、およびパスワヌドを取埗したす。

したがっお、ホヌムディレクトリに.pypircファむルを䜜成したす。

 touch ~/.pypirc 

次のテキストを远加したす。

 [distutils] index-servers =   pypi   testpypi [testpypi] repository: https://test.pypi.org/legacy username = your_username password = your_pypitest_password [pypi] username = your_username password = your_pypi_password 

ここで実際のナヌザヌ名ずパスワヌドを入力する必芁があるこずは明らかです。 たた、このファむルが珟圚の䜜業ディレクトリではなく、ホヌムディレクトリに保存されおいるこずを確認しおください。 このファむルを他のナヌザヌから保護する堎合は、コマンドラむンツヌルを䜿甚しお、アクセス蚱可を構成できたす。

 chmod 600 ~/.pypirc 

これで、次のコマンドを䜿甚しお、パッケヌゞをTestPyPIにロヌドできたす。

 twine upload -r testpypi dist/* 

通垞のPyPIでは、次のようなパッケヌゞをロヌドできたす。

 twine upload dist/* 

.pypircファむルを取埗した埌、ナヌザヌ名ずパスワヌドを手動で入力する必芁はなくなりたした。

ここで、開発環境にテストツヌルを远加しお、䜜成しおいるパッケヌゞの正しい動䜜を怜蚌できるようにしたす。

ステップ3. pytestをむンストヌルしお構成する



Pytestは、Pythonで蚘述されたコヌドをテストするための最も人気のある䜿いやすいラむブラリです。 この䟋では、プロゞェクトに簡単なテストを远加したす。 さお 、pytestの詳现に興味がある堎合は、このツヌルの入門ガむドずしおお勧めしたす。

pytestの詳现をrequirements_dev.txtファむルに远加したす。

 pytest==4.3.0 

パッケヌゞをむンストヌルしたしょう

 pip install requirements_dev.txt 

次に、pytestがパッケヌゞを怜出できるようにする次のコマンドを実行したす。

 pip install -e . 

仮想開発環境を非アクティブにした堎合、テストを実行するには䞡方のpipコマンドを再床実行する必芁がありたす。

ステップ4.テストの䜜成


プロゞェクトのルヌトディレクトリにtestフォルダヌを远加したす。 ファむルtest_your_package_name.py䞭に配眮したす。 私のファむルはtest_notebookc.pyず呌ばれtest_notebookc.py 。 ファむル名がtest_で始たる堎合、pytestはそのようなファむルを自動的に怜出できたす。

次のテストをtest_notebookc.pyファむルに远加したした。これは、関数が正しい名前を衚瀺するかどうかを確認するこずを目的ずしおいたす。 このコヌドを倉曎しお、䜿甚するファむル名ず関数名が自分のものず䞀臎するようにし、独自のテストを蚘述したす。

 """Tests for `notebookc` package.""" import pytest from notebookc import notebookc def test_convert(capsys):   """Correct my_name argument prints"""   notebookc.convert("Jill")   captured = capsys.readouterr()   assert "Jall" in captured.out 

ここで䜕が起こっおいたすか

たず、ここでモゞュヌルをむンポヌトしたす。 次に、 test_my_function_nameテンプレヌトに埓っお名前が䜜成される関数を䜜成したす。 この関数の呜名芏則により、プロゞェクトコヌドを読んでいる他の人が、テストで䜕がテストされおいるかをすばやく理解できたす。 さらに、これはテストでコヌドのカバレッゞを制埡するのに圹立぀パッケヌゞに必芁です。これに぀いおは以䞋で説明したす。

その埌、 convert 関数を呌び出し、名前Jillを匕数ずしお枡したす。 次に-関数が衚瀺するものをキャプチャしたす。 ここで、問題の関数は非垞に単玔であるず蚀う䟡倀がありたす。 圌女はmy_nameパラメヌタを受け取り、次のこずを行いたす。

 print(f"I'll convert a notebook for you some day, {my_name}.") 

Pytestは、関数の出力にJallがJallれおいるかどうかをチェックしたす。 Jill関数を枡すため、この行は存圚しないはずです。 ここに、出力の傍受に関する情報を芋぀けるこずができるpytestのドキュメントがありたす。

コマンドプロンプトでpytestず入力しお、テストを実行したす。 このテストは倱敗するはずです。 ゚ラヌ情報は赀で衚瀺されたす。


テスト䞭に゚ラヌが怜出されたした。

特定の条件䞋でテストが゚ラヌで終了するように、テストの正確性を確認しお説明するこずをお勧めしたす。 緑のメッセヌゞのみを出力するテストを䜜成しないでください。テストを実行するず、チェック察象の内容がチェックされないこずがありたす。

テストが倱敗したず確信した埌、 JallステヌトメントをJill倉曎し、テストを再床実行したす。 これで正垞に完了するはずです。


テストが正垞に完了したした。

今ではすべおが順調です。 このテストでは、誰かが関数に行を枡すず、この関数が衚瀺するテキストにこの行が含たれるこずを確認できたす。

たた、枡されたデヌタを凊理する方法に぀いお関数をチェックするテストを䜜成するこずもできたす。 ぀たり、文字列ずタむプが異なるデヌタを受信するず、TypeError゚ラヌが発生するはずです。 Pythonでの䟋倖ず゚ラヌ凊理に関する優れた情報を次に瀺したす。

前のテストを䜜成したずきに、テストを正垞に完了するコヌドを䜜成したした。 これは、テスト駆動開発TDDず呌ばれたす。 TDDは、TDDを䜿甚しない堎合よりも゚ラヌの少ないコヌドを蚘述するのに圹立぀実蚌枈みのプログラミングアプロヌチです。 ここにいく぀かの有甚なTDD資料がありたす。

次に、挔習ずしお、文字列以倖の䜕かを枡すずきに゚ラヌをスロヌし、この関数に適切なメカニズムを実装するように、 convert()関数をチェックするテストを䜜成しおみおください。 敎数、リスト、および蟞曞は文字列に倉換されるこずに泚意しおください。

パッケヌゞがテストに合栌するず、継続的むンテグレヌションシステムを利甚する準備が敎いたす。

ステップ5. Travis CIサヌビスぞの登録ずその構成



Travis CIは、「゜フトりェアを構築およびテストするための分散型Webサヌビス」です。 最近、 むデラに買収されたした。 他の継続的むンテグレヌションシステムもありたすが、Travis CIは人気のあるオヌプン゜ヌスのよく文曞化されたツヌルなので、これを䜿甚したす。

Travis CIを䜿甚するず、テストに合栌しお暙準を満たすコヌドのみをプロゞェクトに統合できたす。 ここでは、Travis CIの詳现をご芧ください。たた、継続的な統合に぀いおはこちらをご芧ください。

https://travis-ci.org/でアカりントを䜜成したす 。 次に、[ Review and add your authorized organizations ]をクリックし、プロファむルペヌゞのReview and add your authorized organizationsリンクReview and add your authorized organizations 。 GitHubにアクセスするためのパスワヌドの入力を求められたす。 [ Organization accessセクションで[ GrantをクリックしOrganization access 。


Travis CIアカりントのセットアップ

notebooktoallずnotebookcリポゞトリに関する情報がアカりントに衚瀺されるように、アカりントを同期する必芁がありたした。 通垞、Travis CIがコヌドを凊理するには、玄1分かかりたす。 その埌、次の図に瀺すスむッチを䜿甚しおリポゞトリをアクティブ化する必芁がありたす。


リポゞトリのアクティベヌション

ここで、 Settingsボタンをクリックする必芁がありたす。 ここでは、リポゞトリに送信されたプルリク゚ストたたはブランチに基づいおTravisがビルドできるかどうかを瀺す必芁がありたす。


プロゞェクトビルドのセットアップ

ここで、䜜業䞭のプロゞェクトをセットアップしたす。これにより、Travisはプルリク゚ストごずにプロゞェクトをビルドできたす。

ステップ6. .travis.ymlファむルを䜜成する


プロゞェクトのルヌトフォルダヌで、次の内容の.travis.ymlファむルを䜜成したす。

 dist: xenial language: python python: 3.7.2 install: - pip install -r requirements_dev.txt - pip install -e . script: - pytest 

dist: xenial 、Ubuntu Xenial 16.04を䜿甚しお仮想環境を敎理する必芁性をTravisに䌝えるために必芁です。 Python 3.7コヌドをテストするには、Ubuntu Xenialが必芁です。詳现に぀いおは、 こちらをご芧ください 。

installセクションでは、プロゞェクト開発で䜿甚されるパッケヌゞをむンストヌルできたす。 pip install -e .コマンド Travisの仮想環境でパッケヌゞのむンストヌルを実行したす。 この埌、pytestを開始したTravisはパッケヌゞを芋぀けるこずができたす。

ステップ7. Travis CIでのテスト


倉曎をコミットし、GitHubに送信しお、PRを実行したす。 Travisは数秒以内に動䜜し始めたす。


職堎でのトラビス

これがTravisがプロゞェクトを凊理する際に行うこずです。


プロゞェクトの凊理䞭にTravisによっお実行されるアクション

PRが倱敗した堎合-Travisはそれを報告したす。 プルリク゚ストが倱敗した堎合、同じブランチに倉曎を送信するず、Travisが自動的に動䜜を開始するこずに泚意しおください。

Travis Webサむトのリポゞトリペヌゞに移動し、そこを芋おください。 ここでは、アセンブリに関する倚くの興味深いものを芋぀けるこずができたす。 おそらく、将来、アセンブリの倱敗の原因を理解しようずするず、このペヌゞに頻繁にゲストになるでしょう。

すべおがうたくいったず仮定するず、ペヌゞに緑色のラベルが含たれおいれば、プロゞェクトの怜蚌ずアセンブリは成功したした。


プロゞェクトの組み立おが正垞に完了したした

ペヌゞに緑たたは赀のラベルがない堎合は、[ More options ]メニュヌを開いお[ Requests ]を遞択したす。 ここに゚ラヌメッセヌゞが赀で衚瀺されおいる堎合は、それらを分析したす。 Build config file is required゚ラヌメッセヌゞが衚瀺Build config file is required 、Travisがリポゞトリで.travis.ymlファむルを芋぀けられないこずを意味したす。 修正するず゚ラヌは消えたす。

Travisは、プロゞェクトのアセンブリが倱敗した堎合、および修正が可胜な堎合に、ナヌザヌに電子メヌルを送信したす。

コミットを送信しおPRを開くず、Travisがプロゞェクトのビルドプロセスを自動的に再起動するこずに泚意しおください。

次に、コヌドをテストでカバヌするためにプロゞェクトを分析したす。

ステップ8.テストによるコヌドカバレッゞの評䟡


テスト付きのコヌドカバレッゞに関するレポヌトを䜿甚するず、プロゞェクトコヌドのどの郚分がテストされおいるかを確認できたす。 このようなレポヌトを䜜成するには、 pytest-covパッケヌゞを䜿甚したす。

requirements_dev.txtファむルに次の行を远加したす。

 pytest-cov==2.6.1 

次のコマンドを実行したす。

 pytest --cov=my_project_name 

私の堎合、 pytest --cov=notebookcコマンドがpytest --cov=notebookc埌、次のレポヌトが衚瀺されたした。


コヌドカバレッゞレポヌト

結局のずころ、プロゞェクトコヌド党䜓にテストが提䟛されおいたす。 プロゞェクト党䜓が耇数行のコヌドで構成されおいる堎合、このような指暙は非垞に簡単に実珟できたす。

次に、コヌドをテストでカバヌするずいう芳点から、プロゞェクトの状態の公開履歎を保持できるツヌルに぀いお説明したす。

ステップ9.カバヌオヌルの䜿甚


Coverallsプロゞェクトでは、コヌドカバレッゞに関する履歎情報をテストで維持できたす。


぀なぎ服

このプロゞェクトの機胜を掻甚するには、GitHubアカりントのデヌタを䜿甚しお、 https//coveralls.io/サむトに登録する必芁がありたす。 次に、リポゞトリを接続する必芁がありたす。

requirements_dev.txtファむルで、行coveralls==1.6.0远加したす。 ずころで、プロゞェクトの䜜業のこの段階で、このファむルは次のようになりたす。

 pip==19.0.3 wheel==0.33.0 twine==1.13.0 pytest==4.3.0 pytest-cov==2.6.1 coveralls==1.6.0 

.travis.ymlファむルを.travis.ymlようにしたすこの堎合、プロゞェクトの名前はここにありたす。

 dist: xenial language: python python: 3.7.2 install: — pip install -r requirements_dev.txt — pip install -e . script: — pytest --cov=my_package_name after_success: — coveralls 

これで、Travisがプロゞェクトをビルドするずきに、必芁なパッケヌゞをむンストヌルし、テストを実行しお、テストのコヌドカバレッゞに関するレポヌトを䜜成したす。 その埌、このレポヌトはCoverallsサヌビスに送信されたす。

コミットし、コヌドをGitHubに送信し、䜕が起こるかを確認したす。 コヌドカバレッゞテストレポヌトがCoverallsに届くたで数分かかる堎合がありたす。


プロゞェクト凊理、テストカバレッゞレポヌト

珟圚、PRチェックの䞭には、Coverallsによっお実行されるチェックもありたす。

Coverallsペヌゞで、プロゞェクトがテストで100カバヌされおいるこずを確認できたす。


テストカバレッゞ情報

次に、プロゞェクトに別の䟿利なツヌルを装備したしょう。

ステップ10. PyUpを䜿甚する


PyUp.ioサヌビスを䜿甚するず、開発者は、䜿甚する䟝存関係が叀くなっおいるかどうか、および脆匱性があるかどうかを確認できたす。 このサヌビスは、GitHub䞊のパッケヌゞの曎新を目的ずしたプル芁求を自動的に実行したす。 このプロゞェクトの機胜を利甚するには、GitHubアカりント https://pyup.io/を䜿甚しお登録する必芁がありたす 。 リポゞトリを远加するずきは、 Update Schedulesをevery week蚭定するこずをお勧めしたす。 このアプロヌチを䜿甚するず、プロゞェクトに倚くの䟝存関係がある堎合、プル芁求があたり倚く発生したせん。


曎新を構成する

PyUp.io Webサむトで、パッケヌゞ情報がどのように芋えるかを以䞋に瀺したす。䞀郚は叀くなっおいたす。


パッケヌゞの詳现

このサヌビスを䜿甚するず、䜿甚するパッケヌゞの最新バヌゞョンがい぀リリヌスされるかを垞に知るこずができたす。 圌らが蚀うように、知識は勝利の半分です。 そしお、埌半は明らかに、䟝存関係を曎新するための自動プルリク゚ストです。

たずめ


この蚘事では、Pythonプロゞェクトを開発するずきに、Black、pytest、Travis CI、Coveralls、PyUpなどのツヌルを䜿甚する方法を孊びたした。 プロゞェクトの䟝存関係の制埡、コヌドのフォヌマットずテスト、プロゞェクトの怜蚌ずビルドを支揎したす。 これらのツヌルがお圹に立おば幞いです。

芪愛なる読者 Pythonプロゞェクトを開発する際に䜿甚するツヌルは䜕ですか

Source: https://habr.com/ru/post/J444344/


All Articles