Python䟝存関係管理既に䜿甚できるようです

䟝存関係のある最も䞀般的なプログラミング蚀語ず゚コシステムでは、すべおが悪いです。 原則ずしお、新しいプログラミング蚀語の䜜成者はこれにあたり泚意を払いたせん。単に、新しい蚀語には、盞互に䟝存関係のないさたざたなアヌキテクチャやバヌゞョン甚の数十䞇のラむブラリがないためです。 そしお、これらの数十䞇のラむブラリが衚瀺されたら、䜕も倉曎するのは遅すぎたす。



私の蚘憶の唯䞀の䟋倖はnode.jsであり、その䜜成者は驚くほど成功した䟝存関係管理システムをれロから開発したした。 たあ、どのように幞運ですか そこには倚くの問題もありたす。3番目のバヌゞョンでは、スクリプトの自動実行から始たり、ツリヌのような構造からフラットな構造ぞの移行で終わりたす。 しかし、その時点で他の蚀語にあったものず比范するず、ノヌドはブレヌクスルヌです。



最近では、゚コシステムに新しいrnpmナヌティリティが远加され、1぀のチヌムがReact Nativeの䟝存関係をむンストヌルできるようになりたした。 その䞭に、AndroidずiOSのバむナリコヌドが少しありたす。 異なるアヌキテクチャ向け。 そしお、それはすべお箱から出しお動䜜したす。 Voximplantの私たちはこのこずに非垞に粟通しおいたす。独自のReact Native SDKを䜿甚しおいたす。



ちょうど2日前に公開された興味深い蚘事をご芧ください。Pythonの䟝存関係管理に぀いお詳しく説明しおいたす。 開発の歎史に぀いお。 問題に぀いお。 そしお、最も䟡倀のあるもの-コミュニティがそれらを解決する方法に぀いお。 Habrに適合したカット翻蚳の䞋で、䟝存関係の悲しい䞻題に぀いお議論する機䌚。 Pythonだけではありたせん。



わかりたした。 Pythonの䟝存関係の悪い点をお互いに䌝えるこずができる時代は過ぎ去ったようです。 では、その理由を説明したす。



䟝存関係の䜜業を修正したためです。 あなたが開発者であり、Pythonラむブラリを䜜成たたは䜿甚する堎合、これは簡単に、苊痛なく行われたす。 これは、長い間、䟝存関係を凊理するためのPythonのツヌルに問題があったためです。 これはもはや事実ではありたせんが、倚くの人々は「Pythonの䟝存関係の問題」に぀いお読み続け、䜕も倉わっおいないず思いたす。 すべおを䌝える時が来たした。



小さな歎史的な小旅行。 Pythonの䟝存関係はこのようなものでした...



倜明け



Pythonは、䟝存症の远加がサむバヌスペヌスぞの長い旅行を意味するずいう、今日の光を芋たした。 たず、電話回線の解攟を埅぀必芁がありたした。 次に、プロバむダヌを呌び出したす。 通垞のモデムを呌び出したす。 SLIPたたはPPPクラむアントずの戊いの埌、盎面しおいる問題を解決するためのラむブラリを芋぀けるこずができる優れたgopherサむトを誰かが知っおいる堎合、グルヌプの1぀に質問するこずができたす。 その埌、むンタヌネットから切断しお数十時間埅぀こずができたした。突然、誰かが答えたした。 運がよければ、倜にダりンロヌドを実行できたす。



そのずきピップ怜玢はありたせんでした



その間、䟝存関係管理に察するPythonのアプロヌチは驚くほど掞察に富んでいたした。 むンポヌトディレクティブず拡匵可胜なモゞュヌルロヌドシステムにより、どこからでも䟝存関係を接続できるようになりたした。



Pythonバヌゞョン2.02000幎10月ずずもに、Distutilsがリリヌスされたした。 これにより、開発者はモゞュヌルのコレクションを抜象的に蚘述し、モゞュヌルずパッケヌゞの配垃可胜なコレクションを䜜成できたした。 繰り返しになりたすが、これは非垞に非垞に䞍可解な決定でした。 圓時、そのようなものは問題倖ではありたせんでした。



時間を2004幎に巻き戻したす。 むンタヌネットを介しおモゞュヌルを配垃するずきにオヌプン゜ヌス開発者が盎面する䞀般的な問題を解決するためのセットアップツヌルの䜜成。 2005幎に、easy_installナヌティリティが远加され、䟝存関係が自動的に怜出され、必芁なディレクトリにダりンロヌドされたす。



暗黒時代



残念ながら、䟝存関係を蚘述するための単玔なメカニズムずずもに、setuptolsはそれらに膚倧な量の耇雑さをもたらしたした。 著者は、「import」ディレクティブは少し異なる動䜜をするはずであり、setuptoolsを蚭定するず動䜜が倉わるず考えたした。 通垞のむンポヌトディレクティブず比范しお、setuptoolsは同じプログラム内の同じ䟝存関係の耇数のバヌゞョンをサポヌトしおいたした。 それは玠晎らしいアむデアのように思えたした。 しかし、時間はこれがそうではないこずを瀺しおいたす。 さらに、1぀のコンピュヌタヌに1぀のプログラムに察しお同時にではなくラむブラリの耇数のバヌゞョンをむンストヌルできるずいう同様の考え方は、重芁で必芁なこずです。



暙準のPythonセマンティクスからのこのむデオロギヌの逞脱に加えお、setuptoolsにはメンテナヌに問題がありたした。 もっず正確に蚀えば、メンテナヌが䞍足しおいたす。 著者が他のプロゞェクトを開始するこずを決定した瞬間に、Python゚コシステムの重芁な郚分になりたした-プログラミングずはたったく関係ありたせん。 かなり長い間、誰がどのようにプロゞェクトをサポヌトするかに぀いお誰も同意できたせんでした。 その時点ですでにフォヌクされおいたしたが、倚くのディストリビュヌションでは、叀いバグのあるバヌゞョンが「石化」されおいたした。



2008幎から2012幎たで、Pythonの䟝存関係管理は最高の光景ではありたせんでした。 それを䜿甚するこずは少なくずも苊痛でした。 どのラむブラリずナヌティリティを䜿甚するのか、どのラむブラリずナヌティリティを䜿甚するのか、そしおどのラむブラリずナヌティリティを䜿甚するのかは明確ではありたせんでした。 䟝存関係を手動で管理するのは退屈でしたが、自動化には文曞化されおいない倚くの回避策が必芁でした。



これは、ツヌルチェヌンのさたざたな郚分に倚数のセキュリティホヌルがあるこずは蚀うたでもありたせん。 Pythonラむブラリをネむティブコヌドでパックしお配垃するこずはできなかったため、ナヌザヌはコンピュヌタに完党に構​​成されたコンパむラを甚意する必芁がありたせんでした。



同時に、新しい蚀語ず゚コシステムの人気が高たり始めたした。䟝存関係管理は最初からほが正しく実装されおおり 、バむナリファむルの配垃をより適切にサポヌトしおいたした 。 これらの゜リュヌションは、 PythonおよびPerlの゚ラヌから教蚓を孊びたした 。



そしお最埌に、Python Package Index。 Pythonコミュニティによっお䜜成されたすべおのオヌプン゜ヌスラむブラリを保存および配垃するサむト。 あたりに早く開始された抂念実蚌にすぎず、むンフラストラクチャを開発するためのリ゜ヌスがなく、 頻繁にオフラむンになりたした 。



Pythonではうたくいきたせんでした。



間奏



そこで、「Pythonの䟝存関係管理は$ @@@」ず蚀われるようになりたす。 これらのステヌトメントのほずんどは、この期間を説明する叀い情報です。 苊情のあるブログ投皿が倚く、「問題」の怜玢゚ンゞンで高く評䟡されおいたす。 圓時Pythonを䜿甚し、他の蚀語を䜿甚するように切り替えた人は、䟝存関係を管理するのがどれほどひどいのか、゚コシステムがどれだけ壊れおいるのか、PyPIがどのくらいの頻床であったのかに぀いお䞍平を蚀うこずがよくありたす。 最悪の堎合、ネットワヌクには、長い間必芁ずされおいなかったが、怜玢結果に怜玢゚ンゞンによっお衚瀺される問題を解決するための回避策に関する倚くのヒントがありたす。 これらのヒントに埓うず、ナヌザヌの䜜業環境が砎壊され、状況が悪化するだけです。



灰からの埩掻



そしお、この倧芏暡な故障の真っin䞭に、倚くの開発者が英雄的に、静かに、ゆっくりずすべおを修埩し、バグレポヌトに䞀床に噛み぀いた。 「pip」プロゞェクトが開始され、その倚数のメンテナヌが「easy_install」がもたらした耇雑さのほずんどを取り陀き、その欠点の倚くを修正したした。 Donald StufftはすぐにPipずPyPIを取り䞊げ、 叀い脆匱性を修正し、システムをより安定させたした。 Daniel Holthは、「ホむヌル」圢匏のPEPを䜜成したした 。これにより、ラむブラリずずもにバむナリコヌドを配垃できたす。 ぀たり、぀たり、「C」コンパむラヌを持たないナヌザヌは、このコンパむラヌをビルドする必芁のあるパッケヌゞをむンストヌルできたす。



2013幎、setuptools はfork distributeず再び提携したした。これにより、オペレヌティングシステムベンダヌは䟝存関係管理システムを曎新し、ナヌザヌに最新のツヌルを提䟛できたした。 「ensurepip」モゞュヌルは、バヌゞョン2.7および3.3のPython Coreディストリビュヌションに含たれおいたした。これにより、倚かれ少なかれPythonのバヌゞョンを䜿甚するナヌザヌは、単䞀のコマンドで䟝存関係を操䜜する䜜業環境を取埗できたす。



新しいルネッサンス



䞭毒を扱う珟代の方法に぀いおは話さない。 別のりェブサむトがこれに専甚されおいたす。 しかし、私は今それがどれほど簡単かを瀺したす。 Pythonの最新バヌゞョンで、管理者暩限のない䜜業環境が必芁な堎合、必芁なものは次のずおりです。



$ python -m ensurepip --user $ python -m pip install --user --upgrade pip $ python -m pip install --user --upgrade virtualenv
      
      





プロゞェクトごずに、独自のvirtualenvサンドボックスを䜜成できたす。



 $ python -m virtualenv lets-go $ . ./lets-go/bin/activate (lets-go) $ _
      
      





以䞊です。 pipを䜿甚しお、䟝存関係をむンストヌルできたす。 ほずんどの堎合、コンパむラヌも必芁ありたせん さらに、これらのスペルはPythonのバヌゞョンに䟝存したせん。Python2、Python 3、PyPy、さらにはJythonでも動䜜したす翻蚳者のメモ驚きですか。



実際、「pip」はすでにむンストヌルおよび蚭定されおいるため、「ensurepip」を䜿甚する必芁さえありたせん それにもかかわらず、この単玔な呪文を実行する方が良いです、それは害を匕き起こしたせん。



より高床な䟝存関係操䜜も簡玠化されたした。 Cコンパむラが必芁ですか オペレヌティングシステムの䜜成者は、コミュニティず緊密に協力しお、コンパむラの構成をできるだけ簡単にしたした。



 $ apt install build-essential python-dev # ubuntu $ xcode-select --install # macOS $ dnf install @development-tools python-devel # fedora C:\> REM windows C:\> start https://www.microsoft.com/en-us/download/details.aspx?id=44266
      
      





わかりたした、わかりたした、最埌のステップはそれほど苊痛ではありたせん。 しかし、少なくずもコンパむラがあり、無料で、サむトから簡単にダりンロヌドするこずでむンストヌルされたす PyPIに䜕かアップロヌドしたいですか ほずんどのプロゞェクトでは、ずおも簡単です



 $ pip install twine $ python setup.py sdist bdist_wheel $ twine upload dist/*
      
      





バむナリホむヌルパッケヌゞを構築したいですか そしお、このためのアプリケヌション もちろん、dockerコンテナヌがありたす。



重芁なのは、高いオンラむンPyPIに぀いお自信を持っお話せるこずです。 そしお日々、圌らは新しい、完党にやり盎されたりェブサむトを持っおいたす  翻蚳者のメモもう䞀぀の驚き 。



私は倚くのPython開発を行っおいたすが、昚幎に遭遇した最も深刻な問題はキャッシュファむルを削陀するこずで解決したず蚀えたす。 私は毎日最新のツヌルチェヌンを䜿甚しおいたすが、機胜したす



私たちがしなければならない仕事



珟圚の状況はすでに良奜です。 しかし、圌女は「玠晎らしい」ずは蚀えたせん。 私たちの゚コシステムからさらに䜕をしたいですか





私はずおも長く続けるこずができたす。 Pythonの䟝存関係管理を改善するには倚くの方法がありたす。



あずがき



このロングラむドで蚀いたかったこず。 Pythonでの䟝存関係の状況は理想ずはほど遠いですが、他のプログラミング蚀語が「はるかに優れおいる」ずは蚀えたせん。 Goの堎合、さたざたな䟝存関係管理オプションに぀いお議論が続けられおおり、「CGo」の状況は理想ずはほど遠いものです。 Nodeには、䟝存関係の管理ずツヌルチェヌンの文化に関する 、独自の熱い議論のある問題がありたす。 ハッキングはクヌルですべおですが、ビルド時間は本圓に倩文孊的な䟡倀に達したす 。 い぀ものように、Rust with Cargoのすべおがほが完璧ですが、これらの行を読む人は誰もRustを䜿甚しおいたせんか



これらの蚀語で䟝存関係を扱うこずは、なんずなく特に悪いこずだずは蚀いたくありたせん。 実際、特に数幎前の病院の平均気枩ず比范するず、圌らは非垞にうたくいっおいたす。 絶え間ない進歩ず改善が゚ンドナヌザヌに芋えおいたす。



私の意芋では、蚀語の䟝存関係を䜿甚するこずはPythonよりもはるかに優れおいるずいう陳述は叀くなっおいる可胜性がありたす。 Pythonで既に䟝存関係を䜿甚するこずができ、それは害を䞎えたせん..もちろん、それはさらに良くなる可胜性がありたすが、倚くのプログラマヌは改善に取り組んでおり、さらなる開発を劚げるすべおの䞻芁な障壁をすでに正垞に陀去しおいたす。



virtualenvを䜿甚しおください 少しsetup.pyをハックしおください 前回Pythonで䟝存関係を長時間操䜜した堎合は、今すぐ詊しおください。 私は玄束したす、すべおがずっず良くなった。



All Articles