259

virtualenvで使用されているPythonのバージョンをアップグレードする方法はありますか(たとえば、バグ修正リリースが出た場合)?

pip freeze --local > requirements.txtディレクトリを削除してから削除することもできますが、これにpip install -r requirements.txtは、たとえば、numpy私が頻繁に使用する大規模なライブラリの再インストールが必要になります。

これは、たとえば2.6-> 2.7からアップグレードする場合の利点であることがわかりますが、2.7.x->2.7.yについてはどうでしょうか。

4

13 に答える 13

130

Python 3.3以降に付属しているvenvモジュールを使用している場合は、--upgradeオプションがサポートされています。ドキュメントによる

Pythonがインプレースでアップグレードされていると仮定して、このバージョンのPythonを使用するように環境ディレクトリをアップグレードします

python3 -m venv --upgrade ENV_DIR
于 2017-02-23T01:48:39.427 に答える
90

あなたはこれを見ましたか?その答えを誤解していない場合は、古い仮想環境の上に新しい仮想環境を作成してみてください。どのPythonがvirtualenvを使用するかを知る必要があります(virtualenvのバージョンを確認する必要があります)。

virtualenvが古いものと同じpythonバージョンでインストールされていて、virtualenvパッケージをアップグレードするオプションがない場合は、これを読んで、必要なpythonバージョンでvirtualenvをインストールすることをお勧めします。

編集

私はこのアプローチ(古いアプローチの上に新しい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バージョンを変更する場合は、そのバージョンのすべてのパッケージを再度インストールする必要があります(または、必要なパッケージを新しいバージョンのpackagesフォルダーにリンクするだけです。つまりyour_env / lib / python_newversion / site-packages)

于 2012-06-16T02:11:04.530 に答える
25

再度更新: 次の方法は、virtualenvの新しいバージョンでは機能しない可能性があります。古いvirtualenvに変更を加える前に、依存関係を要件ファイル(pip freeze > requirements.txt)に保存し、別の場所にバックアップする必要があります。問題が発生した場合でも、新しいvirtualenvを作成して、古い依存関係をインストールできます(pip install -r requirements.txt)。

更新:最初に回答してから5か月後に回答を変更しました。次の方法は、より便利で堅牢です。

副作用: Pythonをv2.7.8にアップグレードした後、仮想環境でSymbol not found: _SSLv2_method行う場合の例外も修正import ssl

注意:現在、これはPython2.7.x専用です。


OSXでHomebrewPythonを使用している場合は、最初にdeactivateすべて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コアファイルと標準ライブラリ(プラスsetuptoolspip)が削除されますが、にインストールされているカスタムライブラリsite-packagesは、純粋なPythonになるとすぐに保持され、機能します。バイナリライブラリは、正しく機能するために再インストールする必要がある場合とない場合があります。

これは、Djangoがインストールされている5つの仮想環境で機能しました。

ところで、./manage.py compilemessages後で動作しない場合は、これを試してください:

brew install gettext && brew link gettext --force
于 2014-07-13T15:36:51.467 に答える
17

ステップ1:要件を凍結し、既存の環境のバックアップを取る

pip freeze > requirements.txt
deactivate
mv env env_old

ステップ2: Python 3.7をインストールし、仮想環境をアクティブ化する

sudo apt-get install python3.7-venv
python3.7 -m venv env
source env/bin/activate
python --version

ステップ3:要件をインストールする

sudo apt-get install python3.7-dev
pip3 install -r requirements.txt
于 2020-03-15T07:41:45.027 に答える
9

既存のvirtualenvwrapperプロジェクトのPythonバージョンをアップグレードし、同じ名前を維持する方法

Doug Hellmannの優れたvirtualenvwrapperを使用している人のために、特に既存の回答では回答が得られなかったため、回答を追加します。

いくつかのコンテキスト:

  • 私はPython2であるいくつかのプロジェクトとPython3であるいくつかのプロジェクトに取り組んでいます。使用したいのですがpython3 -m venv、Python2環境をサポートしていません
  • 新しいプロジェクトを開始するときは、これを使用mkprojectして仮想環境を作成し、空のプロジェクトディレクトリを作成して、そこにcdします。
  • workonPythonのバージョンに関係なく、virtualenvwrapperのコマンドを使用してプロジェクトをアクティブ化したい

方向:

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に追加することを検討します。

于 2017-06-10T19:50:05.677 に答える
7

古い仮想環境の上に新しい仮想環境を作成できませんでした。しかし、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

ホイール(pip install wheel)を取り付けてから実行しpip wheel -r requirements.txtます。これにより、作成されたホイールが私のpip.confのwheel-dirに保存されます。

それ以降、これらの要件のいずれかをpipインストールするときはいつでも、ホイールからインストールします。これは非常に高速です。

于 2014-10-21T11:22:37.937 に答える
3

このアプローチは常に私のために働きます:

# First of all, delete all broken links. Replace  my_project_name` to your virtual env name
find ~/.virtualenvs/my_project_name/ -type l -delete
# Then create new links to the current Python version
virtualenv ~/.virtualenvs/my_project_name/
# It's it. Just repeat for each virtualenv located in ~/.virtualenvs

から取得:

于 2019-10-02T18:36:20.590 に答える
3

更新したい環境の名前が。であると考えてみましょうvenv

1.バックアップvenv要件(オプション)

まず、仮想環境の要件をバックアップします。

pip freeze > requirements.txt
deactivate
#Move the folder to a new one
mv venv venv_old

2.Pythonをインストールします

sudoアクセスがないと仮定すると、pyenvをインストールするための信頼できる高速な方法Pythonです。そのためには、実行する必要があります

$ curl https://pyenv.run | bash

その後

$ exec $SHELL

ここで提案されているように

もし、pyenvを更新しようとすると

pyenv update

そして、エラーが発生します

bash: pyenv: command not found

これは、pyenvパスが.bashrcにエクスポートされなかったためです。次のコマンドを実行することで解決できます。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc

次に、シェルを再起動します

exec "$SHELL"

次に、必要なバージョンのPythonをインストールする必要があります。バージョン3.8.3としましょう

pyenv install 3.8.3

を実行することで正しくインストールされているかどうかを確認できます

pyenv versions

出力は場所とバージョン(この場合は3.8.3)である必要があります

3.新しい仮想環境を作成します

最後に、新しいPythonバージョンをインストールして、新しい仮想環境を作成します(これを呼びましょうvenv) 。

python3.8 -m venv venv

それをアクティブにします

source venv/bin/activate

要件をインストールします

pip install -r requirements.txt

これで、新しい環境で稼働しているはずです。

于 2020-11-16T17:49:19.023 に答える
2

venvいくつかの回答はを参照し、他の回答はを参照しているので、明確にしておきたいと思いvirtualenvます。

-por--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を作成してください。

于 2017-07-20T19:00:16.243 に答える
2

を使用して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
>>>
于 2018-04-09T17:02:46.307 に答える
1

ホームディレクトリをあるMacから別のMac(Mountain LionからYosemite)に移動しましたが、古いラップトップを手に入れるまで、壊れたvirtualenvに気づきませんでした。私はvirtualenvポイントをPython2.7にインストールしましたbrewが、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を実行することができました。

于 2015-06-17T09:32:35.247 に答える
1

Homebrewを使用してPython3をインストールおよびアップグレードするOSXまたは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を実行するとエラーが発生しました。最終的には、要件ファイルから環境を再作成しました。

于 2017-10-20T15:25:07.380 に答える
0

問題のあるすべての人のために

エラー:コマンド'[' / Users / me / Sites / site / venv3 / bin / python3'、' -Im'、' ensurepip'、' --upgrade'、'--default-pip']'がゼロ以外を返しました終了ステータス1。

python3.6-venvをインストールする必要があります

 sudo apt-get install python3.6-venv
于 2018-11-23T11:44:49.943 に答える