Virtualenvで使用されているpythonのバージョンをアップグレードする方法はありますか(バグ修正リリースがリリースされた場合など)。
pip freeze --local > requirements.txt
を実行してから、ディレクトリとpip install -r requirements.txt
を削除できますが、これには、たとえば、numpy
など、大きなライブラリを大量に再インストールする必要があります。
これは、たとえば2.6-> 2.7からアップグレードするときに利点ですが、2.7.x-> 2.7.yはどうですか?
this を見ましたか?その答えを誤解していない場合は、古い仮想環境の上に新しい仮想環境を作成してみてください。どのpythonがvirtualenvを使用するかを知る必要があります(virtualenvのバージョンを確認する必要があります)。
古いバージョンと同じpythonバージョンでvirtualenvがインストールされていて、virtualenvパッケージをアップグレードするオプションがない場合、 this を読んでvirtualenvをインストールすることができます。必要なpythonバージョン。
編集
このアプローチ(古いアプローチの上に新しいvirtualenvを作成するアプローチ)をテストしましたが、うまくいきました。 python 2.6から2.7または2.7から3.xに変更すると問題が発生する可能性があると思いますが、同じバージョン内でアップグレードする場合(必要に応じて2.7のまま)問題は、すべてのパッケージが両方のpythonバージョン(2.7.xおよび2.7.yパッケージがyour_env/lib/python2.7 /内にある)で同じフォルダーに保持されているためです。
Virtualenv pythonバージョンを変更する場合、そのバージョンのすべてのパッケージを再度インストールする必要があります(または、必要なパッケージを新しいバージョンパッケージフォルダーにリンクするだけです。つまり、your_env/lib/python_newversion/site -パッケージ)
Python 3.3+に付属するvenvモジュールを使用している場合は、--upgrade
オプションがサポートされています。 docs :
Pythonがインプレースでアップグレードされていると仮定して、このバージョンのPythonを使用するように環境ディレクトリをアップグレードします
python3 -m venv --upgrade ENV_DIR
再度更新:次の方法は、virtualenvの新しいバージョンでは動作しない可能性があります。古いvirtualenvに変更を加える前に、依存関係を要件ファイル(pip freeze > requirements.txt
)に保存し、別の場所にバックアップを作成する必要があります。何か問題が発生した場合でも、新しいvirtualenvを作成して、その中に古い依存関係(pip install -r requirements.txt
)をインストールできます。
Updated:最初に回答した5か月後に回答を変更しました。次の方法は、より便利で堅牢です。
副作用:また、Pythonのアップグレード後に仮想環境でSymbol not found: _SSLv2_method
を実行すると、import ssl
例外が修正されます_ v2.7.8に。
注意:現在、これはPython 2.7.xのみ 。
OS XでHomebrew Pythonを使用している場合は、最初にdeactivate
all virtualenvを実行してから、Pythonをアップグレードします。
brew update && brew upgrade python
次のコマンドを実行します(<EXISTING_ENV_PATH>
は仮想環境のパスです):
cd <EXISTING_ENV_PATH>
rm .Python
rm bin/pip{,2,2.7}
rm bin/python{,2,2.7}
rm -r include/python2.7
rm lib/python2.7/*
rm -r lib/python2.7/distutils
rm lib/python2.7/site-packages/easy_install.*
rm -r lib/python2.7/site-packages/pip
rm -r lib/python2.7/site-packages/pip-*.dist-info
rm -r lib/python2.7/site-packages/setuptools
rm -r lib/python2.7/site-packages/setuptools-*.dist-info
最後に、仮想環境を再作成します。
virtualenv <EXISTING_ENV_PATH>
そうすることで、古いPythonコアファイルと標準ライブラリ(およびsetuptools
とpip
)が削除されますが、site-packages
にインストールされたカスタムライブラリは、純粋なPythonになったらすぐに保持され、動作します。バイナリライブラリは、正常に機能するために再インストールする必要がある場合とない場合があります。
これは、Djangoがインストールされた5つの仮想環境で機能しました。
ところで、./manage.py compilemessages
がその後動作しない場合は、これを試してください:
brew install gettext && brew link gettext --force
古い仮想環境の上に新しい仮想環境を作成することはできませんでした。しかし、pipには、新しいvenvに要件を再インストールするのをはるかに高速にするツールがあります。 Pipは、requirements.txtの各アイテムをホイールパッケージにビルドし、ローカルキャッシュに保存できます。新しいvenvを作成し、その中にpip installを実行すると、pipは、検出された場合、事前に構築されたホイールを自動的に使用します。ホイールは、各モジュールでsetup.pyを実行するよりもはるかに速くインストールされます。
私の〜/ .pip/pip.confは次のようになります。
[global]
download-cache = /Users/me/.pip/download-cache
find-links =
/Users/me/.pip/wheels/
[wheel]
wheel-dir = /Users/me/.pip/wheels
Wheel(pip install wheel
)をインストールし、pip wheel -r requirements.txt
を実行します。これにより、構築されたホイールがpip.confのwheel-dirに保存されます。
それ以降、これらの要件のいずれかをpipインストールすると、ホイールから要件がインストールされます。これは非常に迅速です。
Doug Hellmannの優れた virtualenvwrapper を使用している人には、特に既存の回答ではうまくいかなかったため、回答を追加します。
コンテキスト:
python3 -m venv
を使用したいのですが、Python 2環境をサポートしていませんmkproject
を使用します。これは、仮想環境を作成し、空のプロジェクトディレクトリを作成し、そこにcdしますworkon
コマンドを使用してプロジェクトをアクティブ化し続けたい行き方:
既存のプロジェクトの名前がfoo
で、現在Python 2(mkproject -p python2 foo
)を実行しているとしましょう。ただし、コマンドは2.xから3.x、3.6.0から3.6.1などにアップグレードしても同じです。また、現在、アクティブ化された仮想環境内にいると想定しています。
1.古い仮想環境を非アクティブ化して削除します。
$ deactivate
$ rmvirtualenv foo
フックにカスタムコマンド(bin/postactivate
など)を追加した場合、環境を削除する前にそれらを保存する必要があることに注意してください。
2.一時ディレクトリに実際のプロジェクトを隠します:
$ cd ..
$ mv foo foo-tmp
3.新しい仮想環境(およびプロジェクトディレクトリ)を作成し、アクティブ化します。
$ mkproject -p python3 foo
4.生成された空のプロジェクトディレクトリを実際のプロジェクトに置き換え、プロジェクトディレクトリに戻します。
$ cd ..
$ mv -f foo-tmp foo
$ cdproject
5.依存関係を再インストールし、新しいPythonバージョンなどを確認します。
$ pip install -r requirements.txt
$ python --version
これが一般的な使用例である場合、PRを開いて、$ upgradevirtualenv
/$ upgradeproject
などをvirtualenvwrapperに追加することを検討します。
Homebrewを使用してPython3をインストールおよびアップグレードするOS XまたはmacOSでは、python -m venv --upgrade ENV_DIR
が機能する前にシンボリックリンクを削除する必要がありました。
Upgrade_python3.shに以下を保存したので、今から何ヶ月後にもう一度やり直さなければならないか覚えています。
brew upgrade python3
find ~/.virtualenvs/ -type l -delete
find ~/.virtualenvs/ -type d -mindepth 1 -maxdepth 1 -exec python3 -m venv --upgrade "{}" \;
更新:これは最初はうまくいくように見えましたが、py.testを実行するとエラーが発生しました。最後に、要件ファイルから環境を再作成しました。
答えの一部はvenv
を参照し、他の回答はvirtualenv
を参照するため、明確にしたいだけです。
-p
または--python
フラグの使用は、virtualenv
ではサポートされていますが、venv
ではサポートされていません。複数のPythonバージョンがあり、venv
を作成するバージョンを指定する場合は、次のようにコマンドラインで実行します。
malikarumi@Tetuoan2:~/Projects$ python3.6 -m venv {path to pre-existing dir you want venv in}
もちろん、他の人が指摘したようにvenv
でアップグレードできますが、最初にvenv
を作成するために使用されたPythonを既にアップグレードしていることを前提としています。システムのどこかにまだないPythonバージョンにアップグレードすることはできませんので、まず必要なバージョンを取得してから、必要なvenvをすべて作成してください。
pipenv
を使用している場合、その場で環境をアップグレードできるかどうかはわかりませんが、少なくともマイナーバージョンのアップグレードの場合は、新しい環境を作成するときにパッケージを最初から再構築しないように十分賢いようです。例:3.6.4から3.6.5:
$ pipenv --python 3.6.5 install
Virtualenv already exists!
Removing existing virtualenv…
Creating a v$ pipenv --python 3.6.5 install
Virtualenv already exists!
Removing existing virtualenv…
Creating a virtualenv for this project…
Using /usr/local/bin/python3.6m (3.6.5) to create virtualenv…
⠋Running virtualenv with interpreter /usr/local/bin/python3.6m
Using base prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/python3.6
Also creating executable in /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/python
Installing setuptools, pip, wheel...done.
Virtualenv location: /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD
Installing dependencies from Pipfile.lock (84dd0e)…
???? ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 47/47 — 00:00:24
To activate this project's virtualenv, run the following:
$ pipenv Shell
$ pipenv Shell
Spawning environment Shell (/bin/bash). Use 'exit' to leave.
. /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/activate
bash-3.2$ . /Users/dmoles/.local/share/virtualenvs/autoscale-aBUhewiD/bin/activate
(autoscale-aBUhewiD) bash-3.2$ python
Python 3.6.5 (default, Mar 30 2018, 06:41:53)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>>
ホームディレクトリをあるMacから別のMac(Mountain LionからYosemite)に移動しましたが、古いラップトップを手に入れるまで壊れたvirtualenvに気付きませんでした。 brew
によってインストールされたPython 2.7を指すvirtualenvがあり、YosemiteにはPython 2.7が付属していたので、virtualenvをシステムpythonに更新したかったのです。既存のディレクトリの上でvirtualenv
を実行すると、OSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
エラーが発生しました。試行錯誤により、いくつかのリンクを削除し、手動でさらに修正することで、この問題を回避しました。これは私がついにやったことです(@Rockaliteがやったことと似ていますが、より簡単です):
cd <virtualenv-root>
rm lib/python2.7/config
rm lib/python2.7/lib-dynload
rm include/python2.7
rm .Python
cd lib/python2.7
gfind . -type l -xtype l | while read f; do ln -s -f /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/${f#./} $f; done
この後、既存のディレクトリの上でvirtualenvを実行することができました。
問題のあるすべての人のために
エラー:コマンド '['/Users/me/Sites/site/venv3/bin/python3 '、'-Im '、' ensurepip '、'-upgrade '、'-default-pip ']'はゼロ以外を返しました終了ステータス1。
Python3.6-venvをインストールする必要があります
Sudo apt-get install python3.6-venv