Virtualenv: 何百ものプロセスが生成されました

作成日 2019年07月09日  ·  31コメント  ·  ソース: pypa/virtualenv

python 3.7.4 64ビットをインストールした後、フォルダー内の仮想環境を開始しようとしました。 しかし、約1,000のPythonプロセスが開始され、仮想環境は完成しませんでした。

OS:Windows10ホーム
Cygwin64ビットで実行されるコード

失敗したコード:

mkdir test
cd test
virtualenv venv

pip list

パッケージバージョン


アステロイド2.2.0
colorama 0.4.1
isort 4.3.9
怠惰なオブジェクトプロキシ1.3.1
mccabe 0.6.1
ピップ19.1.1
ピリント2.3.0
ロープ0.14.0
setuptools 40.8.0
6つの1.12.0
typed-ast 1.3.1
virtualenv 16.6.1
ラップ1.11.1

最も参考になるコメント

メンテナはこちら。 上で述べたように、CPythonの一部の内部変数のコントラクトが変更され、これにより、Python3.7と3.8の両方のプロセス作成で無限ループが発生します。

全てのコメント31件

今日初めてpython、pip、virtualenvをインストールしようとしましたが、同じ問題に直面しました。

で3行コメントして修正しました
Python\Python37\Lib\site-packages\virtualenv.py
と追加
-p python
virtualenvを実行しているとき

私がコメントした行は783-785です:
if hasattr(sys, "_base_executable"):
print("hasattr(sys, \"_base_executable\") == yes")
return sys._base_executable

@AndrYast環境をアクティブ化した後、まだ3.7.4を使用していますか? これは間違いなく、昨日(7/8/19)にリリースされた3.7.4で特に問題になっているようです。

@thingselliotprogramsはい、実行中
venv\Scripts\activate
python --version
私にくれます
Python 3.7.4

昨日Pythonを3.7.4にアップグレードしてから、pipenvがハングするという同じ問題が発生しています。 virtualenvに関連する根本的な問題。 今のところ、Pythonを3.7.3にダウングレードしました。

https://github.com/python/cpython/pull/14428は常にsys._base_executable設定するため、最新のAckvirtualenvは壊れています

3.7.4でも同じ問題が発生します。 pipenvを使用して、 [WinError 8] Not enough memory resources are available to process this commandを取得しています。 virtualenvを作成できません。 3.7.3ではすべてがうまく機能します。

3.7.4でも、この正確な問題が発生しています。

python.exeプロセスの雷が鳴るとメモリが使い果たされ、virtualenvの作成は最終的に失敗します。

この問題は3.7.2では存在しませんでした。

メンテナはこちら。 上で述べたように、CPythonの一部の内部変数のコントラクトが変更され、これにより、Python3.7と3.8の両方のプロセス作成で無限ループが発生します。

これが_良い_アイデアかどうかはわかりませんが、この簡単なハックで仮想環境を作成することができました。

# virtualenv.py:783
if hasattr(sys, "_base_executable") and sys.version_info < (3, 7, 4):
    return sys._base_executable

その行の上のコメントから判断すると、以前のバージョンで楽しんだようです。

たぶん、 sys._base_executable != sys.executableという追加のチェックが必要です。 しかし、正直なところ、わかりません。これはパッチリリースで絶えず変更されているようで、何が起こっているのかについていく時間がありません(すべて、「Windowsストア」ビルドをサポートする作業に関連しているようです) Pythonの)。

たぶん@zoobaはここでコメントしたり提案をしたりすることができます。 文書化されていない内部を使用しているため、最終的には問題に対処する必要がありますが、必要な情報を取得するためのサポートされている方法がわからないため、対象とならないソリューションは

最終的に、ここではおそらく#1377が唯一の信頼できるソリューションです。

そのチェックを追加すれば大丈夫だと思います。

Windowsを実行してvirtualenvを作成しようとするTravisCIジョブも失敗します。 TravisCIは最近3.7.4に移行しました。 😞

https://travis-ci.community/t/infinite-loop-of-virtualenv-windows/4139

Travisビルドからのおそらく役立つ情報:

version: v6.2.0 https://github.com/travis-ci/worker/tree/5e5476e01646095f48eec13196fdb3faf8f5cbf7
instance: travis-ci-onion-1803-containers-1542208204-ad01dca (via amqp)
bash version 4.4.19(2)-release
Chocolatey v0.10.11
python3 v3.7.4 [Approved]
python3 has been installed.
Successfully installed pip-19.1.1
Successfully installed virtualenv-16.6.1

$ virtualenv $HOME/venv
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
Running virtualenv with interpreter c:\python37\python.exe
...[repeats 763 more times]...
The command "virtualenv $HOME/venv" failed and exited with 1 during .
Your build has been stopped.
MemoryError

そのチェックを追加すれば大丈夫だと思います。

これを行うと、base_executableチェックで修正する予定の問題が(3.7.4で)再導入されませんか? 確かに、これらの問題はそれほど深刻ではなかったので、それでもやる価値があると思われますが、完全な解決策ではないと思います。

退行の原因にはならないと思いますよね?

私は何らかの方法でテストしていません(そして、申し訳ありませんが、時間がありません)。

ここでの結論は何ですか、virtualenvの修正リリースは可能ですか?

はい、誰かが修正でPRをした場合です😊

あなたが言及した回帰のテストはありますか?

そうだと思います。

関連するテスト(#1345で追加)はtest_create_environment_from_venvが、動作がそれぞれ異なるため、Python 3.7.2、3.7.3、および3.7.4のすべてで実行する必要があることに注意してください(マイナー)バージョン、そしてそれは私が知る限り、CIがカバーするものではありません。

周りの人々の迅速な修正に感謝します。 base_executableexecutableと比較すると、 _base_executable属性の存在を単にチェックするのと同等の機能が提供されると思います(おそらく、もう少し明確です)

そもそも何が問題を引き起こしたのか興味があります。

仮想環境を作成するには、システムpythonを入手する必要があります。 venvまたはvirtualenvパッケージのいずれかを使用して仮想環境を作成しようとしても機能しません。

以前は、システムpythonを使用していない場合にのみ、 sys._base_executableがpython 3.7+に設定されていました。 これは、上記のPRで常に設定されるように変更されました(非システムPythonがsys.executable等しい場合)。 この変更により、CPythonの組み込みコード(システム標準ライブラリとサイトパッケージの検出の一部)が簡素化されるため、変更されますが、これは契約の変更です。 それは私的な属性であると言われているので、変更は壊れているとは見なされなかったので、大丈夫です。 その後、別の場所からこの情報を取得できなかったため、このプライベートフィールドに依存していました。

Python 3.7.4
同じ問題が発生している場合は、役立つ場合に備えて出力を投稿してください。

Requirement already up-to-date: virtualenv in c:\users\tester\appdata\local\programs\python\python37\lib\site-packages (16.6.1)
Running virtualenv with interpreter c:\users\tester\appdata\local\programs\python\python37\python.exe
Running virtualenv with interpreter c:\users\tester\appdata\local\programs\python\python37\python.exe
Running virtualenv with interpreter c:\users\tester\appdata\local\programs\python\python37\python.exe
...
(Repeated 350 times in total)

Traceback (most recent call last):
  File "c:\users\tester\appdata\local\programs\python\python37\lib\site-packages\virtualenv.py", line 2611, in <module>
    main()
  File "c:\users\tester\appdata\local\programs\python\python37\lib\site-packages\virtualenv.py", line 814, in main
    sub_process_call = subprocess.Popen([interpreter, file] + sys.argv[1:], env=env)
  File "c:\users\tester\appdata\local\programs\python\python37\lib\subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "c:\users\tester\appdata\local\programs\python\python37\lib\subprocess.py", line 1178, in _execute_child
    startupinfo)
OSError: [WinError 8] Not enough memory resources are available to process this command

1383が作成されました。 マージする前に、手動でテストすることを強くお勧めします。 3.7.4がインストールされていないため、変更をまったくテストしておらず、現在実行されている3.7CIのマイナーバージョンがわかりません。

ここで問題を報告している人の中には、変更をテストして、問題が修正され、他の破損が発生していないことを確認できる人がいるかもしれません。

TravisCIのPython3.7.4で動作します! 新しい問題は見当たりません。

これは、テストに使用したTravis構成です(関連部分)。

    - stage: test
      os: windows
      language: shell
      env: PATH=/c/Python37:/c/Python37/Scripts:$PATH
      before_install:
        - choco install python
        # python -m pip install virtualenv
        - pip install git+https://github.com/pypa/virtualenv
        - virtualenv $HOME/venv
        - source $HOME/venv/Scripts/activate

結果(関連部分):

Progress: Downloading python 3.7.4... 100%
python3 v3.7.4 [Approved]
python3 package files install completed. Performing other installation steps.
Installing 64-bit python3...
python3 has been installed.
Installed to: 'C:\Python37'
...
16.31s$ pip install git+https://github.com/pypa/virtualenv
Collecting git+https://github.com/pypa/virtualenv
  Cloning https://github.com/pypa/virtualenv to c:\users\travis\appdata\local\temp\pip-req-build-ceb1gi36
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
    Preparing wheel metadata: started
    Preparing wheel metadata: finished with status 'done'
Building wheels for collected packages: virtualenv
  Building wheel for virtualenv (PEP 517): started
  Building wheel for virtualenv (PEP 517): finished with status 'done'
  Stored in directory: C:\Users\travis\AppData\Local\Temp\pip-ephem-wheel-cache-kx8oezso\wheels\8d\58\76\749812a30b0b5c5cdc1b327e343711660ee5ebf51cf56d2df5
Successfully built virtualenv
Installing collected packages: virtualenv
Successfully installed virtualenv-16.6.1
46.51s$ virtualenv $HOME/venv
Using base prefix 'c:\\python37'
New python executable in C:\Users\travis\venv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.
0.16s$ source $HOME/venv/Scripts/activate

TravisCIのPython3.7.4で動作します! 新しい問題は見当たりません。

素晴らしい、確認してくれてありがとう

os: windows

Travisが提供するWindows環境に今は気づいていませんでしたが、それは興味深いことです:-)

@pfmoore彼らは、Windowsが「早期アクセス」であり、問​​題があることを強調しています(重要なことに、シークレットを使用することはできません)。

はい、Windowsのサポートは#travisAlumsが発生する直前に展開されましたIIRC(新しい親会社はTravisのチームを大幅に縮小しました)

私はそれを修正するために(ファイルvirtualenv.pyに)このコードを持っています:
起源は:
hasattr(sys、 "_base_executable")の場合:
に変更されました:
hasattr(sys、 "_base_executable")であり、os.environ.get( "VIRTUALENV_INTERPRETER_RUNNING")ではない場合:
これを行うことにより、ループを修正します

修正はhttps://pypi.org/project/virtualenv/16.6.2/からリリースする必要があり

テストしたばかりで、実際に修正されています。 迅速で良い対応をありがとうございました。

このページは役に立ちましたか?
0 / 5 - 0 評価