Virtualenv: virtualenvがアクティブな場合、py3venvの作成は失敗します

作成日 2017年10月22日  ·  12コメント  ·  ソース: pypa/virtualenv

ユーザーがアクティブな「virtualenv」で作業しているときにpython3「venv」を作成しようとすると、結果の仮想環境は適切に作成されません。

以下に示すように、 venv virtualenv環境とouter virtualenvの下で作成されており、多くのバイナリとそのsite-packagesディレクトリの内容が欠落しています。 ただし、 python -m pipは機能します。

セットアップ:

[vagrant@vagrant-arch ~]$ python3.6 -m venv venv
[vagrant@vagrant-arch ~]$ virtualenv -p python3.6 outer
[vagrant@vagrant-arch ~]$ source outer/bin/activate
(outer) [vagrant@vagrant-arch ~]$ python -m venv virtualenv

bin内容:

[vagrant@vagrant-arch ~]$ ls venv/bin/
activate  activate.csh  activate.fish  easy_install  easy_install-3.6  pip  pip3  pip3.6  python  python3  python3.6

[vagrant@vagrant-arch ~]$ ls virtualenv/bin/
activate  activate.csh  activate.fish  python  python3

site-packages内容:

[vagrant@vagrant-arch ~]$ ls venv/lib/python3.6/site-packages/
__pycache__  easy_install.py  pip  pip-9.0.1.dist-info  pkg_resources  setuptools  setuptools-28.8.0.dist-info

[vagrant@vagrant-arch ~]$ ls virtualenv/lib/python3.6/site-packages/
[vagrant@vagrant-arch ~]$ 
bug enhancement help-wanted

最も参考になるコメント

.real_prefixダンスを行うには、venv側からの修正が必要だと思います。

誰が修正の責任を負うべきかは私にはわかりません。 venvは、 virtualenv内から実行されていることを検出する必要がありますか、それともvirtualenvvenvと互換性のある環境を作成する必要がありますか? 一方では、 virtualenvvenvよりも前のものです。 一方、 venvは標準ライブラリの一部です。

とにかく、これが私が現在tox-venvで持っている回避策です:

https://github.com/tox-dev/tox-venv/blob/58401663fda66dfba4f344553525c73d57432d5e/src/tox_venv/hooks.py#L10 -L49

現在はpython3検索するだけなので、実行可能パスの検出を改善できます。 たとえば、 python3.6が必要な場合でも、 python3python3.4指します。

全てのコメント12件

python -m pip 「機能」しますが、パッケージを元のvirtualenvにインストールします。

(outer) [vagrant@vagrant-arch ~]$ deactivate 
[vagrant@vagrant-arch ~]$ source virtualenv/bin/activate
(virtualenv) [vagrant@vagrant-arch ~]$ python -m pip install tox

アクティブなvenvであり、toxが含まれている必要があります

(virtualenv) [vagrant@vagrant-arch ~]$ ls virtualenv/lib/python3.6/site-packages/
(virtualenv) [vagrant@vagrant-arch ~]$ ls virtualenv/bin/
activate  activate.csh  activate.fish  python  python3

ただし、toxは元のvirtualenvにインストールされます

(virtualenv) [vagrant@vagrant-arch ~]$ ls outer/lib/python3.6/site-packages/
__pycache__      pip                  pkg_resources  pluggy-0.5.2.dist-info  py-1.4.34.dist-info  setuptools-36.6.0.dist-info  six.py  tox-2.9.1.dist-info          virtualenv.py       wheel
easy_install.py  pip-9.0.1.dist-info  pluggy         py                      setuptools           six-1.11.0.dist-info         tox     virtualenv-15.1.0.dist-info  virtualenv_support  wheel-0.30.0.dist-info
(virtualenv) [vagrant@vagrant-arch ~]$ ls outer/bin 
activate  activate.csh  activate.fish  activate_this.py  easy_install  easy_install-3.6  pip  pip3  pip3.6  python  python-config  python3  python3.6  tox  tox-quickstart  virtualenv  wheel

--copiesオプションを使用して同様のvenvを作成しようとしましたが、効果がありませんでした。

ここでもこれを打つ: https

.real_prefixダンスをするには、 venv側から修正が必要だと思います。 pre-commitのための回避策として、そのアプローチを調査します。

これはbpoの問題のようです: https ://bugs.python.org/issue30811

.real_prefixダンスを行うには、venv側からの修正が必要だと思います。

誰が修正の責任を負うべきかは私にはわかりません。 venvは、 virtualenv内から実行されていることを検出する必要がありますか、それともvirtualenvvenvと互換性のある環境を作成する必要がありますか? 一方では、 virtualenvvenvよりも前のものです。 一方、 venvは標準ライブラリの一部です。

とにかく、これが私が現在tox-venvで持っている回避策です:

https://github.com/tox-dev/tox-venv/blob/58401663fda66dfba4f344553525c73d57432d5e/src/tox_venv/hooks.py#L10 -L49

現在はpython3検索するだけなので、実行可能パスの検出を改善できます。 たとえば、 python3.6が必要な場合でも、 python3python3.4指します。

同様の回避策を選択しました: https

(主な違いは、pre-commitはすでにいくつかの正規化を行っているため、 bin/python3だけでなくbin/$(basename exe)を使用します)

ええ、ええ、全体的に私たちはvenvと互換性があるべきだと感じています。

@gaborbernat berdario / pew#173によると、そうではないようです。 @uranusjrチャイムを鳴らしてみませんか?

この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 開いたままにしておきたい場合は、コメントを追加してください。 貢献していただきありがとうございます。

1343

@ gaborbernat #1339と区別するために、問題の名前を「virtualenv内でvenvを実行する」に変更する必要があると思います。

@FranklinYuは更新されたタイトルで十分ですか?

これは、#1366が本格化したことで廃止されつつあります。

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