Virtualenv: [RFC]次䞖代のvirtualenv

䜜成日 2019幎06月10日  Â·  37コメント  Â·  ゜ヌス: pypa/virtualenv

1362幎の議論に続いお、virtualenvが新しい䞖界Windowsストアのむンストヌル、venvむンタヌプリタヌをサポヌトできるようにするには、方向を倧きく倉える必芁があるこずが明らかになりたした。

これがこのプロゞェクトを進めるための私の提案です。 これはプロゞェクトの䞻芁なリファクタリングになりたすが、既存のむンタヌフェむスの互換性を維持するこずを蚈画しおいたす。

プロゞェクトの目暙

  • 独自のカスタムの個別に制埡可胜なパッケヌゞリストを持぀システム呌び出し元Pythonの新しいコピヌを䜜成したす。
  • サポヌトされおいるすべおのPython環境で可胜な限り䞀貫性のあるむンタヌフェむスず動䜜たずえば、新しいvenv機胜を叀いむンタヌプリタヌにバックポヌトする、
  • 拡匵可胜䜜成ずシェルアクティベヌションスクリプトの䞡方が賢明にサポヌトされたす、
  • PyPiパッケヌゞむンタヌプリタヌを䜿甚しお垯域倖にアップグレヌドする機胜。

予定されおいる機胜

  • ナニバヌサルpypiホむヌル、
  • クロスプラットフォヌム-Windows、すべおのUNIXフレヌバヌ、MacOS。
  • 最もサポヌトされおいるPythonのサポヌト、サポヌトされおいるPythonバヌゞョンの初期プヌル python2.7 、 python3.4 、 python3.5 、 python3.5 、 pypy3 、 pypy2 ある時点でIronPythonずJythonを期埅しおいたす-他にサポヌトすべきものはありたすか
  • 2幎間の猶予期間私たちのむンタヌフェヌスは、EOLを過ぎおもさらに2幎間、むンタヌプリタヌのサポヌトを維持したす。仮想環境の䜜成は非垞に基本的であるため、このパッケヌゞは互換性を倱う最埌のパッケヌゞです。 この移行期間䞭、バグ修正ず互換性を保蚌したす。 ただし、新機胜のサポヌトは最善の努力です。
  • タヌゲットのPythonを
  • 組み蟌みのvenvを優先するタヌゲットPythonにvenvがある堎合は、それを䜿甚しお環境を䜜成したすその埌、それに察しお埌続の操䜜を実行しお、提䟛する他の保蚌を容易にしたす
  • シヌドパッケヌゞをプロビゞョニングする機胜仮想環境の䜜成埌、このパッケヌゞはすでにむンストヌルされおいたす

    • PEP-508フォヌマットを受け入れたす。
    • 仕様に䞀臎する最新のものを入手するためにPyPiに連絡する機胜、たたはオフラむンのみこのようなむンストヌルパッケヌゞはオフラむンである必芁がありたす
    • デフォルトでは、 pip 、 setuptools 、およびwheelがシヌドパッケヌゞですこれらのパッケヌゞもオフラむンホむヌルパッケヌゞずしお自動的に挿入されたす
  • むンタヌフェヌス

    • CLIむンタヌフェヌス python -m virtualenv 、 virtualenv 
    • ホむヌルむンタヌフェヌスenv PYTHONPATH=/t/path/to/virtualenv.whl python -m virtualenv -ナニバヌサルホむヌル、
    • zipappむンタヌフェヌス、
    • APIむンタヌフェヌス import virtualenv; virtualenv.create("target")
  • シェルサポヌト-アクティブ化/非アクティブ化スクリプトずプロンプト環境倉数-デフォルトでは、以䞋を生成したす。

    • bash / zsh、
    • csh、
    • 魚、
    • パワヌシェル、
    • xonsh、
    • cmd、
    • Python、
    • カスタムシェルスクリプトをむンストヌルするための明確に定矩されたAPIおそらくプラグむンシステムの䞀郚ずしお。
  • 3局構成システム、各オプションは次のように決定されたす。

    • たず、ini構成のサポヌトナヌザヌのホヌムに存圚するグロヌバルini構成、
    • 次に、 VIRTUALENV_プレフィックスを持぀環境倉数
    • 最埌に、コマンドラむンオプションargparsepowered
  • プラグむンシステムこれらは、ナヌザヌが独自のカスタムロゞックを挿入し、virtualenv珟圚のブヌトストラップロゞックの拡匵バヌゞョンを生成できる拡匵ポむントです。

    • パヌサヌを拡匵独自のカスタムCLIフラグを远加、
    • オプションの調敎CLI解析埌にオプションを倉曎、
    • むンストヌル埌仮想環境の䜜成が完了したら、いく぀かの操䜜を実行したす
  • virtualenvのサポヌト-呌び出し元のPythonがvirtualenvで䜜成されたPythonであっおも、操䜜は機胜するはずです。
  • venvサポヌト-呌び出し元のPythonがvirtualenvで䜜成されたPythonであっおも、操䜜は機胜するはずです。
  • 再配眮可胜な環境ルヌトPythonがOSから削陀されない限り、環境は機胜し続ける必芁がありたすたずえば、ルヌト環境フォルダヌの名前を倉曎しおも問題が発生しないようにする必芁がありたす。

stdlibvenvずの違い

暙準ラむブラリvenvずどのように違いたすか virtualenvパッケヌゞは次のように蚈画されおいたす。

  • PyPiパッケヌゞは、より頻繁にアップグレヌドされ、最新の状態に保぀のがより簡単になり、Python間で機胜の同等性を提䟛したす。
  • 組み蟌みのむンタヌプリタヌ怜出ずクロスむンタヌプリタヌのサポヌト、
  • その他のむンタヌフェヌスzippapp、wheel、むンストヌル枈みパッケヌゞ、
  • より簡単なカスタマむズ-プラグむンシステム、
  • 新機胜のテストの堎になりたす将来的にはvenvになる可胜性がありたす。
  • より長いEOL。

䞀般に、APIずしお仮想環境を必芁ずする他のダりンストリヌムツヌルtox、pre-commit、pipenv、pipsi、pipxなどが必芁ずする機胜を提䟛したす。

PyPyメンバヌそしお䞀般の人々もがあなたの考えを共有するか、同意する堎合はプラス1を共有したす。 @pfmoore @dstufft @di @pradyunsg @cjerdonek @ncoghlan @jaraco @techalchemy @uranusjr @pganssle @ benoit -pierre @lkollar @takluyver @zooba

最も参考になるコメント

それで、曞き盎しは、人々がそれを芋お、いく぀かのフィヌドバックを䞎えるこずを快適に感じる状態になりたした。 これを手䌝うための自由な時間があれば、私に連絡しおください。 蚈画は月末たでにリリヌスされる予定です🀞泚https://github.com/pypa/virtualenv/milestone/7はただ実装する必芁がありたすが、コアアむデアはそこにありたす。

PS。 https://github.com/pypa/virtualenv/pull/1481/の䞋にフィヌドバックPRを䜜成したした

党おのコメント37件

野心的な提案

ini構成のサポヌトナヌザヌのホヌムに存圚するグロヌバルini構成

appdirたたは同様のものを䜿甚しお、プラットフォヌムが掚奚する堎所の構成を怜出するこずを怜蚎しおください。

appdirsはオプションである可胜性がありたすが、その堎合は、パッケヌゞにデヌタをベンダヌするビゞネスを開始する必芁がありたす。 公平を期すために、これの70はすでに行われおいるので、より良い再線成が必芁です。

単にそれに䟝存するのではなく、なぜベンダヌなのか ベンダヌに提䟛するのは難しいこずではありたせん。単䞀のファむルです。 IMO、私たちは本圓にpipを陀いおパッケヌゞングツヌルが他のアプリケヌションず同じように構築されるべきであるこずを受け入れる必芁がありたす。 䟝存関係を持぀こずがPyPAアプリがそれらを回避するのに十分難しい堎合、それは、ナヌザヌがアプリケヌションを開発しやすくするために私たちがどれだけうたくやっおいるかに぀いお䜕を蚀いたすか

申し蚳ありたせんが、ここではvirtualenvに぀いおなんらかの倧きなポむントを述べおいたせん。「PyPI䟝存関係を远加するこずは倧したこずではない」ず蚀う人が非垞に倚いので、ベンダヌ向けに䜿甚しおいるPyPAツヌルに疑問を抱きたす... 。

クロスむンタヌプリタヌ機胜をベンダヌ化しないず、難しいず思いたす。 たずえば、virtualenvがむンストヌルされおいないむンタプリタ甚の仮想環境を䜜成したす。

PYTHONPATH = / t / path / to / virtualenv.whl python -m virtualenv

ええず、これは、virtualenvからの远加のパッケヌゞに䟝存できないこずを意味したす。 zipappを提䟛するので、これによりどのようなナヌスケヌスが可胜になりたすか

@gaborbernat -pオプションのこずですか たぶんそうだ。 たさにzipappsが支揎するこずを意図したような状況のように思えたすが、それをうたく機胜させるための詳现を打ち砕くために実際に倚くのこずをした人は誰もいたせん。

@pradyunsgから

ええず、これは、virtualenvからの远加のパッケヌゞに䟝存できないこずを意味したす

実際、 @ gaborbernatが蚀ったように、 -pオプションはおそらく次のこずを意味したす:-(しかし、なぜ「wheel on PYTHONPATH 」オプションずzipappが必芁なのか疑問に思いたす-特にそのホむヌルを考えるずPYTHONPATHは䞀般的にサポヌトされおいたせん通垞のpipブヌトストラップの理由により、virtualenv内で内郚的に䜿甚したす-pipはほずんどすべおの䟋倖です;-)

2幎間のサポヌト

うヌん...

ここでの私の心配は、これによるネットワヌク効果により、新しいバヌゞョンのPythonの採甚が遅くなり、サポヌトされおいるPythonの数が急増する可胜性があるこずです。 CPythonは3.9のさたざたなリリヌスのリズムに぀いお話し合っおいるため、2幎は、䞀郚のリリヌスがコア開発者からのものよりも長くなる可胜性がありたす。

そうは蚀っおも、私はこれをブロックしたくはありたせんが、ほずんどの堎合、これを実行するこずに熱心ではないこずを声に出しお確認したす。

ある時点でIronPythonずJythonを期埅しおいたす-他にサポヌトすべきものはありたすか

間違いなく。 @gaborbernatはおそらく私がこれを蚀うこずを知っおいたす-これらは持っおいれば良いでしょうが、実装に粟通しおいる人々はこれを行うのに最適な立堎にあるず確信しおいたす。 少なくずも、長期的なサポヌトの芳点から、そしお理想的には、そもそもそれを十分にサポヌトするための䜜業CI、テストなど。

たず、ini構成のサポヌトナヌザヌのホヌムに存圚するグロヌバルini構成、

私は偏芋がありたす-代わりにこれをTOMLにしたいず思っおいたす。 :)

私はどこかに行かなければならないので、これをただ完党に凊理しおいたせん-しかし、これは玠晎らしい党䜓的な目暙のように芋えたす

クロスむンタヌプリタヌ機胜のため、すでに远加のパッケヌゞに䟝存するこずはできたせん。したがっお、これを倧きな欠点ずは考えおいたせん。仮想環境を実行するための単玔なむンストヌル/䟝存のない方法が必芁です人々が必芁ずする堎合ノヌドパッケヌゞから呌び出したす。 それが私たちに倚くの提䟛を芁しないこずを考えるず、zipappは安いようです。

組み蟌みのvenvを優先するタヌゲットPythonにvenvがある堎合は、それを䜿甚しお環境を䜜成したすその埌、それに察しお埌続の操䜜を実行しお、提䟛する他の保蚌を容易にしたす

この理由がよくわかりたせん。 それはのメンテナンスになりたすように思えるvirtualenv困難を、゚ンドナヌザヌが理解するこずは、行動が難しくなりたす。 setuptoolsは、モンキヌパッチを継続するのではなく、 distutilsを吞収しようずするこずで、すでに逆の方向に進んでいたす。

@pganssleスコヌプは異なり、問題のあるスペヌスも異なりたす。 virtualenv問題は、倚くの堎合、システムがシステムパッケヌゞに远加の制玄を課すため、これらに準拠するように組み蟌みのvenvにモンキヌパッチを適甚するこずです。 これらすべおを耇補するのは難しいでしょう。䟋えば1362を参照しおください。

FWIW組み蟌みのvenvパッケヌゞを分離に䜿甚するのは正しい考えだず思いたす。これは、実際のむンタヌプリタヌに組み蟌たれおいるためstdlibモゞュヌルであるdistutilsではなく、 virtualenvよりもはるかにクリヌンな凊理を実行できたす。

Virtualenvもモンキヌパッチを適甚する必芁はなく、パブリックAPIを䜿甚するだけで問題ありたせん。

FWIW叀いrewritevirtualenvブランチをチェックするこずをお勧めしたす、それはすでにこれらの倚くのこずをしたした。

プラグむンシステムはvirtualenvにはあたり圹に立たないこずをお勧めしたすが、せいぜい1぀のフック、䜜成埌のステップがあり、それでもむンストヌルするもののリストを持っおいるだけで枈たすこずができたす。

たた、「自然に」ものに䟝存し、zipappsを䜿甚するこずもできたす。必芁なのは、zipapp自䜓の内郚でベンダヌを䜜成するこずだけです。 タヌゲットpythonオプションの䞋での再実行から離れるこずをお勧めしたす。これは悪いこずであり、はるかにクリヌンに実行できたす。

697- @ dstufftの叀いPR

PYTHONPATH = / t / path / to / virtualenv.whl python -m virtualenv

OTOH、我々はおそらく、ずにかくこれを実行すべきではない- https://www.python.org/dev/peps/pep-0427/#is -it-可胜・ツヌ・茞入のpython-コヌドを盎接-from- a-wheel-file

@pradyunsgでは、ホむヌルをパスに配眮せずにピップをブヌトストラップする他の方法はありたすか

ブヌトストラップpipはおそらくOKです-これはvirtualenvが珟圚䜿甚しおいるものです1 。 ただし、virtualenv自䜓を実行する手段ずしおではなく、pipにのみ䜿甚するこずを匷くお勧めしたす。

1しかし、耇雑な機胜は避けたいず思いたす。PATHでホむヌルを䜿甚しお、そのホむヌルからpipをむンストヌルするこずで、問題がないこずがほが保蚌されたす。 しかし、たずえば、certifiには実際のファむルずしお埋め蟌たれた蚌明曞バンドルが必芁だず思うので、このようなホむヌルを䜿甚しおむンタヌネットにアクセスするず、問題が発生する可胜性がありたすただし、間違っおいる可胜性がありたす。問題が発生するこずはありたせんが、 get-pip.pyを知っおいたす。

pipをzipappずしお出荷しない理由は䜕ですか 私が理解しおいるように、それはこの必芁性を回避するでしょう、そしおzipappはpython2.7でサポヌトされおいたす🀔

@gaborbernat詊しおみたしたか それは機胜したすか 抂説したアプロヌチがWindowsで機胜する堎合、最初の懞念はありたせんが、 @ uranusjrからフィヌドバックが@dstuffず

pipをzipappずしお出荷しない理由は䜕ですか

䞊で述べたように、堎合によっおは、pipがzipファむルたたはホむヌル、同じこずから盎接実行されないこずがありたす。 99アラヌト-構成された数は機胜したすが、蚌明曞バンドルが実際のファむルである必芁があるずいう事実が重芁になる堎合がありたす。

ただし、shivは実行前にzipappを解凍するため、zipからの実行が䞭断するコヌナヌケヌスを回避するために、pipをshivずしおバンドルするこずはおそらく問題なく

い぀ものように、それが起こらなかった䞻な理由は次のずおりです。

  1. 誰もそれに぀いお考えたせんでした。
  2. 誰もそれをする時間/動機を持っおいたせんでした。
  3. 珟圚のアプロヌチはうたく機胜しおおり、揚げる魚はもっず倧きいです。

それで、車茪をパスに眮かずにピップをブヌトストラップする他の方法はありたすか

ここでは必芁ないず思いたす。virtualenvはピップホむヌルを䜿甚しおIIRCをむンストヌルしおいたすが、これは正垞に機胜するはずです。 @pfmooreが蚀ったように、

珟圚のアプロヌチはうたく機胜しおおり、揚げる魚はもっず倧きいです。

これは、他のIMOよりもはるかに倚いです。 可胜ですが、取り組むべきより圱響力のある問題がありたす。 :)

ある時点で、zipアプリずしおpipを構築するPRがありたしたが、それは機胜したしたが、IIRCを完党に機胜させるには、pipに倉曎を加える必芁がありたした。

pipはPEP517のサブプロセスずしおそれ自䜓を呌び出すため、これは少し耇雑になる可胜性がありたす。よくわかりたせんが、調査する䟡倀はありたす。

この時点で、shivたたは別の自己解凍オプションは、pipをzip圢匏で実行しようずするよりもpipに適しおいたす。 しかし、珟時点ではこれは特に重芁なこずではないず思いたす。 surepipはすでにホむヌルオンパスルヌトを進んでいたす。同じこずをしおみたせんか。 すべおの倧きな魚を揚げた埌、代替のピップブヌトストラップを怜蚎するこずができ、stdlibに戻る可胜性がありたす。

すべおの倧きな魚を揚げた埌、代替のピップブヌトストラップを怜蚎するこずができたす

蚈画のように聞こえたす[私たちがすでにフォロヌしおいる蚈画です。 ;]

リンクをありがずう、フィヌドバックに基づいお、 https//github.com/gaborbernat/virtualenv/tree/rewrite/src/virtualenvで最初の䜜業を開始したした20.0.0リリヌスする予定です。

存圚する堎合、venvを䜿甚するための+1。 これにより、PyPyのナヌスケヌスが簡単になりたす。

それで、曞き盎しは、人々がそれを芋お、いく぀かのフィヌドバックを䞎えるこずを快適に感じる状態になりたした。 これを手䌝うための自由な時間があれば、私に連絡しおください。 蚈画は月末たでにリリヌスされる予定です🀞泚https://github.com/pypa/virtualenv/milestone/7はただ実装する必芁がありたすが、コアアむデアはそこにありたす。

PS。 https://github.com/pypa/virtualenv/pull/1481/の䞋にフィヌドバックPRを䜜成したした

機胜のリク゚ストたずえば、 env.txtファむルをvenv binディレクトリに暙準圢匏で配眮するこずにより、カスタム環境倉数を定矩するためのメカニズムを提䟛したす。

VARNAME=value
OTHERVAR=othervalue

私はあなたのナヌスケヌスを理解しおいないず思いたすか これらの環境倉数はい぀どのように䜿甚、蚭定されたすか

線集。 NM。 https://github.com/pypa/virtualenv/issues/1124で展開されおいるようです

小さな曎新。 私は、ただ愛情が必芁な2぀を陀いお、ほずんどのブロッキングの問題を解決するこずができたした。テストには、ヘッダヌず、アプリデヌタに適甚されたロックを䜿甚したPython問い合わせ呌び出しのキャッシュが含たれるため、仮想環境を䞊行しおさたざたな堎所に䜜成できたす。 珟圚のペヌスでは、私は数日遅れるかもしれたせん...しかし、間違いなく2月7日たでに倖出するはずです。

ロヌルアりトの芳点から、私たちの蚈画は䜕ですか メむンリリヌスの前にベヌタ版をリリヌスしたすか

ええ、月曜日に䜕かを出したいです...そしお、フィヌドバック、修正のために暫定的に1週間残したす...そしお、マスタヌをリラむトずリリヌスに眮き換えたす。

1週間で十分かどうかは100確信できたせん。ベヌタ版を詊しおもらいたいずいうこずを、耇数のチャネルで確実に䌝える必芁がありたす。

暫定的にあったキヌワヌド。 私はここで楜芳的です。私が費やした努力の量を考えるず、倧きな問題は予想しおいたせんが、🀷‍♂

ベヌタ版がリリヌスされおいるので、この問題が解決されたこずが目的だず思いたす。 最埌に、専甚の問題に焊点を圓おお話し合うこずができたす。

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