ユーザーがアクティブな「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 ~]$
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
内から実行されていることを検出する必要がありますか、それともvirtualenv
はvenv
と互換性のある環境を作成する必要がありますか? 一方では、 virtualenv
はvenv
よりも前のものです。 一方、 venv
は標準ライブラリの一部です。
とにかく、これが私が現在tox-venvで持っている回避策です:
現在はpython3
検索するだけなので、実行可能パスの検出を改善できます。 たとえば、 python3.6
が必要な場合でも、 python3
はpython3.4
指します。
同様の回避策を選択しました: https :
(主な違いは、pre-commitはすでにいくつかの正規化を行っているため、 bin/python3
だけでなくbin/$(basename exe)
を使用します)
ええ、ええ、全体的に私たちはvenvと互換性があるべきだと感じています。
@gaborbernat berdario / pew#173によると、そうではないようです。 @uranusjrチャイムを鳴らしてみませんか?
この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 開いたままにしておきたい場合は、コメントを追加してください。 貢献していただきありがとうございます。
@ gaborbernat #1339と区別するために、問題の名前を「virtualenv内でvenvを実行する」に変更する必要があると思います。
@FranklinYuは更新されたタイトルで十分ですか?
これは、#1366が本格化したことで廃止されつつあります。
最も参考になるコメント
誰が修正の責任を負うべきかは私にはわかりません。
venv
は、virtualenv
内から実行されていることを検出する必要がありますか、それともvirtualenv
はvenv
と互換性のある環境を作成する必要がありますか? 一方では、virtualenv
はvenv
よりも前のものです。 一方、venv
は標準ライブラリの一部です。とにかく、これが私が現在tox-venvで持っている回避策です:
https://github.com/tox-dev/tox-venv/blob/58401663fda66dfba4f344553525c73d57432d5e/src/tox_venv/hooks.py#L10 -L49
現在は
python3
検索するだけなので、実行可能パスの検出を改善できます。 たとえば、python3.6
が必要な場合でも、python3
はpython3.4
指します。