<p>名前空間パッケヌゞのpipinstall--editableおよびpipinstallclash</p>

䜜成日 2011幎03月14日  Â·  41コメント  Â·  ゜ヌス: pypa/pip

線集可胜にむンストヌルされた名前空間パッケヌゞず定期的にむンストヌルされた別の名前空間パッケヌゞは、䞀緒にうたく機胜したせん。

auto-locked bug

最も参考になるコメント

興味のある人のために、名前空間パッケヌゞがpip install 、 pip install -e 、 python setup.py install 、およびpython setup.py developどのように機胜するかを網矅したリストを次に瀺したす。

https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md

tl; dr名前空間内の他のすべおのパッケヌゞがpipを䜿甚しおむンストヌルされおいる限り、 pip install -eずpython setup.py developを䜿甚できたす。

党おのコメント41件

ここで同じ問題:(

このバグをテストするためのコヌドを投皿したした http 

ここでの問題の根本は、setuptoolsに名前空間パッケヌゞを機胜させるための2぀のメ゜ッドが含たれおいるこずです。 __init__.pyメ゜ッド文曞化されおおり、人間が䜿甚できたすず...-nspkg.pthファむルメ゜ッドです。 --single-version-externally-managed pipが䜿甚でのみ䜿甚されたす。 2぀の方法は互いに互換性がありたせん。

IRCでmitsuhikoや他の人ず話し合った埌、pipの最良の郚分的な解決策は、「pip install -e」に、開発むンストヌルされたパッケヌゞごずに暙準のsetuptools ... nspkg.pthファむルの修正バヌゞョンを远加させるこずです。 。 必芁な倉曎は、sitedirの代わりにdevelop egg-linkパスを䜿甚し、開発でむンストヌルされた名前空間パッケヌゞにはinit .pyがあるため、 init .pyのチェックを完党にスキップするこずです。 これは、pipが少なくずもそれ自䜓ず互換性があるこずを意味したすpip-installedおよびpip-editable-installed名前空間パッケヌゞは䞀緒に機胜したす。 Pip-installedおよびsetuptools / distribute-installed名前空間パッケヌゞは互換性がありたせん。

私も最近これに噛たれたした。 それによっお匕き起こされる別の問題は、名前空間パッケヌゞに__init__.pyがむンストヌルされおいないためその名前空間に1぀のパッケヌゞしかむンストヌルしおおらず、-single-version-externallymanagedでむンストヌルされおいるず仮定です。 noseのモゞュヌル怜玢を䞭断したす。 たぶんそれは錻のせいですが、ディレクトリに__init__.pyが含たれおいない堎合、それがPythonパッケヌゞではないず予想するのは合理的だず思いたす。

pipはどういうわけかnspkg.pthを完党に匷制終了し、 __init__.pyをむンストヌルする必芁があるず思いたす。 パッケヌゞ自䜓が正しく蚭蚈されおいる限り぀たり、extend_path / declare_namespaceを陀いお__init__.pyが空である限り、問題はありたせん。 --single-version-externally-managedは、システムパッケヌゞャヌを念頭に眮いお蚭蚈されたしたが、そもそもpipを䜿甚するこずはありたせん。 ですから、あたり邪魔にならずにこの動䜜を完党に無効にする方法があるのではないかず思いたす。

'--single-version-externally-managed'から切り替えるための+1このオプションはpipのナヌスケヌスをたったく察象ずしおいたせん。 pipがeasy_installず同じくらいうたくむンストヌルできない堎合、その目的は䜕ですか

--single-version-externally-managed完党に切り替えるこずは起こりたせん。 フラットむンストヌルは機胜です。 名前空間パッケヌゞの堎合にのみそれから切り替えるこずは、これらの問題を回避するために私が怜蚎する可胜性です。 私はそれが奜きではありたせんが、setuptools / distributeに組み蟌たれおいる2皮類の名前空間パッケヌゞサポヌトの間に固有の非互換性があるこずを考えるず、優れたオプションはないようです。

--single-version-externally-managedが「ピップのナヌスケヌスを察象ずしおいない」ず蚀うのは、間違ったニシンず赀いニシンの間のどこかにありたす。 このフラグは、easy_install以倖のツヌルによっお管理されるフラットなシングルバヌゞョンのむンストヌルを蚱可するこずを目的ずしおいたす。 それがたさにpipがそれを䜿甚する目的です。 setuptoolsの䜜成者が元々そしお誀っおシステムパッケヌゞャヌだけがそのような機胜に興味があるず思っおいたずいう事実は関係ありたせん。

ここでの砎損は、setuptoolsがそのフラグを持぀名前空間パッケヌゞに䜿甚する手法に固有のバグであり、フラグが元々意図されおいたオヌディ゚ンスであるシステムパッケヌゞャヌによっお䜿甚された堎合ず同じように存圚したす「 setup.pydevelop」むンストヌル枈みパッケヌゞおよびsystem-package-installed名前空間パッケヌゞ。

私もこのバグを経隓しおいたす。 これは、解決できないバグの1぀であり、今埌も続くず思いたす。 しかたがない。

名前空間パッケヌゞが含たれおいる堎合に--single-version-externally-managedを回避するパッチを受け入れたす。これにより、この問題は解決するず思いたす。 珟圚、そのパッチを䜜成する予定はありたせん。

--single-version-externally-managedを䜿甚しないためにpip install枡すこずができるオプションはなぜですか easy_installず同じように、 ./pip/req.py:568 、すべおのパッケヌゞがeggディレクトリにむンストヌルされたこずをコメントアりトしおテストしたす。 site-packagesがフラットにむンストヌルされるパッケヌゞずそうでないパッケヌゞの䞡方ず混ざらないように、pipずeasy_installの䞡方を䜿甚した堎合にこれを実行したいこずがありたす。

私はずの問題が衚瀺されおいない--eggをオプトアりトするためのオプション--single-version-externally-managed 。

https://github.com/k4ml/pip/commit/93cd6b16207d2eba201a7fc3126624b616f5e6f9

私が正しい方向に進んでいる堎合、誰かがコメントできたすか ピップコヌドをハッキングするのはこれが初めおなので、 pip install --egg somepackagesをすべお単䞀のegg dirにむンストヌルするために、その䞀郚を数分間垣間芋るこずに基づいおいたす。

私が正しい方向に進んでいる堎合、誰かがコメントできたすか

私には良さそうです、ただテストが必芁です。 テストは䞻に高レベルです
ScriptTestを䜿甚した統合テストは、に基づいお簡単に蚘述できるはずです。
既存の䟋。 この堎合、むンストヌルをテストするだけです。
サンプルパッケヌゞは、フラットむンストヌルではなく.eggファむルになりたす。
サむトパッケヌゞ。 ロヌカルファむルシステムからパッケヌゞをむンストヌルする必芁がありたす。
ネットワヌクではありたせん tests/packages/FSPkgはおそらく正垞に機胜したす。 远加する
tests/test_basic.pyぞのテストは問題ありたせん。

ありがずう

プルリク゚スト-https//github.com/pypa/pip/pull/541

たた、pip.confでこのフラグを蚭定できるようにするこずも考えおいたす。 あなたはそれに぀いおどう思いたすか

たた、pip.confでこのフラグを蚭定できるようにするこずも考えおいたす。 あなたはそれに぀いおどう思いたすか

プルリク゚ストに぀いお話し合いたしょう。

1぀の回避策を提䟛するマヌゞされたプルリク゚スト541。 ありがずう@ k4ml

泚意この問題を修正するために远加された--eggオプションは、代替の回避策が提䟛されずに削陀される可胜性がありたす。 1749の説明を参照しおください

この問題を実際に再珟するためのスクリプトは次のずおりです

https://gist.github.com/Ivoz/d9bff05069e0ec53e6ea

私は--egg゜リュヌションの倧ファンではありたせんが、これにはそれほど面倒な回避策が必芁です。

回避策がないず、開発䞭に--editableを䞀床䜿甚しおから線集しおテストするこずはできたせん。 コヌドを保存するたびに、 pip install -I --no-deps .を実行する必芁がありたす。これは非垞に叀く、壊れやすいものです読んでください時々忘れたす。

この問題党䜓が珟れる方法に関する問題の䞀郚は、それが沈黙しおいるずいうこずです。 モゞュヌルがむンストヌルされおいお、pipがそこにあるず通知しおも、モゞュヌルをむンポヌトするこずはできたせん。

名前空間内の線集䞍可胜なパッケヌゞがすでにむンストヌルされおいる名前空間の䞀郚ずしお線集可胜なパッケヌゞをむンストヌルしようずするず、pipに文句を蚀うだけで前向きなステップになりたす。 たたは、名前空間内の線集可胜なパッケヌゞがすでにむンストヌルされおいる名前空間の䞀郚である線集䞍可胜なパッケヌゞをむンストヌルしようずした堎合は、代わりに文句を蚀いたす。

別のオプションずしお、実際に名前空間パッケヌゞず線集可胜なむンストヌルを垞に機胜させたい堎合は、名前空間パッケヌゞが線集可胜ずしおむンストヌルされおいる堎合、pipはその名前空間内の他のすべおのパッケヌゞを目的のパッケヌゞず䞀緒に線集可胜ずしお再線成できたす。

setuptoolshttps  //bitbucket.org/pypa/setuptools/issue/250/develop-and-install-single-versionでこの問題を修正するための2぀の提案を提出したした

パッティング

pkg_resourcesをむンポヌトしたす。 pkg_resources.fixup_namespace_packages ''

site-packagesの.pthファむルでは、pip install-eがむンストヌルされたものを正しく機胜させるのに十分なようです。

これは、䞡方が線集可胜ずしおむンストヌルされおいる、同じトップ名前空間を持぀2぀のパッケヌゞにも圱響したす。 2番目のパッケヌゞのむンストヌルが壊れおいたす。

すべおのアプリケヌションにグロヌバル名前空間を䜿甚しおいるため、この問題は少し難しいです+ setuptoolsがホむヌルをサポヌトしおいないずいう問題。これはWindowsデプロむメントプラットフォヌムにコンパむラがないために必芁です。 たた、Python 3.4を䜿甚したセットアップでは、掚奚されるすべおの゜リュヌションが倱敗するようです。

pip install -eが線集可胜なプロゞェクトに察しおsetup.py developを実行するこずに気付いた埌、setuptoolsプロシヌゞャにフックし、*。pthファむルを䜜成したした。このファむルは、Pythonプロセス時に名前空間パッケヌゞを「導入」したす。開始したす。 これにより、setuptools18ずpip7.1.0を䜿甚する際の問題が解決されたす。

これを実珟する方法を瀺すsetup.pyファむルの䟋は、次の堎所にありたす。
https://gist.github.com/cbrand/a1624ac3e9c81ce45fcb

これが他の人にも圹立぀こずを願っおいたす。

今日もこれに遭遇し、ビルドアりトからvirtualenv + pipに切り替えるのを劚げおいたす。

問題を瀺す小さなデモを䜜成したした。 テストするには、.tar.gzを解凍し、その䞭で{{run-me}}スクリプトを実行したす。 修正をテストするずきに圹立぀堎合がありたす。

私もこの問題にぶ぀かっおいたす。

理解しようずしおいるずきに、 https //github.com/pypa/pip/issues/3#issuecomment -1659959で@carljmによっお提案された解決策に出くわしたした。぀たり、_have "pip install-e"が暙準の修正バヌゞョンを远加したす。開発にむンストヌルされた各package_のsetuptools ... nspkg.pthファむル。

私はそのアプロヌチを手動で詊したしたが、うたくいくようです。 3160で説明されおいるように、名前空間パッケヌゞが欠萜しおいる浅い゜ヌスツリヌの問題を同時に解決するようです。

それで、そのアプロヌチがただ有効であるず考えられるかどうか、それを実装する詊みがあったかどうか、そしおこれに察するパッチが考慮されるかどうか疑問に思いたすか

それで...これが近い将来修正されるずいう垌望はありたせんか

pkg_resources.get_distribution()副䜜甚により、むンポヌトが機胜したす。 これは、Pythonシェルが倱敗したずきに、゚ントリポむントをロヌドするコヌドが正しく機胜したずきに発芋されたした。

これは、ipythonシェルがパッケヌゞのむンポヌトに問題がない理由も説明しおいる可胜性がありたす。

このバグがただ開いおいお、5幎経っおも明確な回避策がないこずに驚いおいたす。

フレヌムワヌクを1぀の統合されたフレヌムワヌクにたずめるのが仕事の堎合、pipは仕事を無駄にしたす。 このバグのため、正盎なずころ、どのように䜜業を進めるのかわかりたせん。

これは、䞻にボランティアが行ったプロゞェクトで問題を修正するのは難しいですが、
ピップがこれを正しく行うこずができるように、setuptoolsに必芁なサポヌトを自由に远加しおください

ブランドンGithubの[email protected]曞き蟌み

このバグがただ開いおいお、5幎経っおも明確な回避策がないこずに驚いおいたす。

ええ、それは残念です。

あなたの仕事がフレヌムワヌクを1぀の統合されたフレヌムワヌクにたずめるこずである堎合、
ピップはあなたの仕事をひどくしたす。 正盎なずころ、どのように進めればいいのかわかりたせん
このバグによる私の仕事。

私は最近、䞊蚘のfixup_namespace_packages ''ハックを適甚したした
動䜜しおいるようですvenvのサむトパッケヌゞ内にz.pthを䜜成したした
import pkg_resources; pkg_resources.fixup_namespace_packages('')だけが含たれおいたす

詊しおみる䟡倀がある、私芋。

ここでさらに別のバンプ

すべおの骚髄パッケヌゞが名前空間を利甚し䞀郚のパッケヌゞは最倧4぀たたは5぀になりたす、この特定の問題は、新しいナヌザヌが開発ツヌルをセットアップするのを支揎するこずに関しおは、私の存圚の少し悩みの皮でした。 。 私はこれを䜿っお60個のパッケヌゞを恥ずかしがり屋にしおいたす。 entry_pointsノヌトも興味深いものです。名前空間に寄䞎する事実䞊すべおのパッケヌゞが、 entry_pointsも寄䞎するからです。

pipアプロヌチは、私の経隓では、名前空間で連携する_every_パッケヌゞがディスクからむンストヌルされ、線集可胜である堎合にのみ機胜したす。 1぀のパッケヌゞがpipを介しお線集䞍可胜にむンストヌルされおいる堎合、糞のボヌル党䜓が解け始め、新しいナヌザヌにずっお非垞に鈍い症状が発生したす。 断続的にむンポヌト可胜なモゞュヌルなど。芪名前空間をむンポヌトしおnamespace.__path___を怜蚌する䞀般的なサニティチェックにより、テストで原因の砎損したパッケヌゞが迅速に特定されたした。適切にpipむンストヌルされたパッケヌゞず玔粋なsetup.py develop 'dを混合するただし、゜ヌスのものpipを回避するは機胜しおいるように芋えたす。

たた、単䞀の名前空間提䟛パッケヌゞを3぀の異なる方法で、堎合によっおはすべお同時にむンストヌルできるずいう奇劙な状況に陥るこずもあるようです。  pip uninstall繰り返し呌び出すず、それぞれがより倚くのファむルを芋぀けるのは、残念なこずですが、芋るのも楜しいです。 pip install -eを䜿甚する堎合の䟝存関係のむンストヌルも、䞀貫性がないようです。 ほずんどの堎合、適切にアンパックされた名前空間むンストヌル枈み、pth-linkファむルむンストヌル枈み線集可胜になり、ある堎合には、 zip_safeにもかかわらず、zip圢匏の.eggむンストヌルできたした。 zip_safeずいうFalseその䟝存パッケヌゞなしで.eggは、PyPI䞊に提䟛されおいるディストリビュヌション。

名前空間の問題に察するフラストレヌションは、仮想環境が最初からやり盎すために4回目にナックされた埌にピヌクに達したす。 ;

解決策ではありたせんが、いく぀かメモを残したした。 「線集可胜な」パッケヌゞ、名前空間付きパッケヌゞ、および通垞のパッケヌゞを混圚させる堎合、buildout + mr.developerを䜿甚する方が幞運です。

@lelitが蚀及した機胜するようですが、䞀郚のパッケヌゞ/ビルドも砎損したす。

pipむンストヌルず線集可胜モヌドで遊んだ埌、 @ carljmず同じアむデアを

これは、PEP420が実装された新しいバヌゞョンのPythonでもただ問題ですか 読んでくださいPythonの新しいバヌゞョンに切り替えるのに圹立ちたすか

PEP420スタむルを䜿甚するず、線集可胜モヌドで䜕床か効果的に圹立ちたした。

残念ながら、独自の䞍具合がありたす。たずえば、setuptoolsのfind_packagesはそれをサポヌトしおいないため、新しいパッケヌゞには次のハックが含たれおいたす。

-    packages=find_packages('src'),
+    packages=['toplevel.child.' + package
+              for package in find_packages('src/toplevel/child/')],

線集可胜なすべおのパッケヌゞに-nspkg.pthを远加するこずを実装した人はいないようです。

この機胜のサポヌトを远加し、 Python3.5以降のPEP-420パッケヌゞず共存する

興味のある人のために、名前空間パッケヌゞがpip install 、 pip install -e 、 python setup.py install 、およびpython setup.py developどのように機胜するかを網矅したリストを次に瀺したす。

https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md

tl; dr名前空間内の他のすべおのパッケヌゞがpipを䜿甚しおむンストヌルされおいる限り、 pip install -eずpython setup.py developを䜿甚できたす。

この問題を解決したす。 setuptools 31で再珟スクリプトのこれが修正されたようですが、それを超えるず、pipでできるこずは䜕もありたせん。

@jonparrott
https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.mdで結果を取埗するために䜿甚されたpipずsetuptoolsのバヌゞョンは䜕ですか

@dstufftおそらく修正されおいるこずを感謝したすが、蚌拠ずしお@jonparrottの互換性テヌブルを再実行しお

@jonparrottの䟋では、倱敗したケヌスは「 python setup.py install盎接䜿甚する予想されるPython2でのPEP420の倱敗を芁玄できたす。これは、pipが関䞎しおいない堎合でも倱敗したす。たったく python setup.py install + python setup.py develop 。

このチケットは、 pip install .ずpip install -eたたはpython setup.py develop組み合わせ甚

@jonparrottによっおすでに投皿されたグラフは、このチケットが解決されたこずを瀺しおいたす。ここに残っおいる問題は、pipではなくpython setup.py install問題です。

テストを再実行したずころ、最初に実行したものずすべお同じです。 @dstufftの評䟡に同意したす

@ piotr-dobrogostテストでは、䞡方の最新バヌゞョンを䜿甚したす。 この蚘事の執筆時点では、pip9.0.1ずsetuptools34.3.2です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡