web-dev-qa-db-ja.com

標準ライブラリとは異なるPythonバージョンのvenvを使用するにはどうすればよいですか?(virtualenvではありません!)

Python 3.4.0をインストールし、python -m venv myenvで仮想環境を作成しました。仮想環境でPythonバージョンを変更するにはどうすればよいですか?ドキュメントには次のように記載されています。

各仮想環境には独自のPythonバイナリ(さまざまなPythonバージョン)の環境の作成が可能)があり、独自の独立したインストール済みセットを持つことができますPythonパッケージ。

[〜#〜]更新[〜#〜]

Virtualenvではなく、標準ライブラリのvenvについて質問していることに注意してください。いくつかのリンクを提供させてください。

Venvに--pythonフラグのようなものが表示されません。

Venvとvirtualenvは完全に似ていますか? venvはあまり人気がなく、誰も使用していないため、virtualenvは標準のままですか?

17
George Sovetov

それは単に不可能です。 python特定のPythonバージョンのvenv)を作成するには、この特定のバージョンが必要です。

明らかに、Pythonインタープリターには以前のバージョンがすべて含まれているわけではありません。Python 3.4.1にはPython 2.7が含まれていません。内部のどこでも8つの実行可能ファイル。

2
George Sovetov

Linux/Macでは、メインライブラリの横に簡単に Pythonの複数のバージョンをインストール でき、標準ライブラリの venv パッケージを使用して、各バージョンから仮想環境を作成できます> = 3.3。

venvを作成します

$ python3.3 -m venv myvenv_foo  # Create a python3.4 venv named 'myvenv_foo'
$ python3.4 -m venv myvenv_bar  # Create a python3.4 venv named 'myvenv_bar'
$ python3.5 -m venv myvenv_baz  # Create a python3.5 venv named 'myvenv_baz'
# etc...

venvをアクティブにします

source myvenv_foo/bin/activate  # Activates venv 'myvenv_foo'

venvを非アクティブ化

deactivate

注意:python vs pythonX.X

複数のPythonバージョンがインストールされている場合は、コマンドにバージョン番号を追加することで、それぞれにアクセスできます。例:python3.5python3.6など。ただし、venvをアクティブ化するときは、アクティブ化されている限り、それをclean/versionless pythonコマンドにバインドすることに注意してください。例えば:

$ python -V # Use the *clean* 'python' command to show the main version of the OS.
Python 2.7.6 
$ python3.5 -m venv myvenv_foo # Create a new venv from 'python3.5'.
$ source myvenv_foo/bin/activate # Activate venv.
$ python -V # The *clean* 'python' command is now bound to your activated venv.
Python 3.5.2 
$ deactivate  # Deactivate venv.
$ python -V  # Now the *clean* command is bound back to the main version.
Python 2.7.6 

Pipenv を使用して、venvパッケージ上で仮想環境を作成/処理することをお勧めします。

公式ドキュメント から:

複数の仮想環境を直接管理するのは面倒になる可能性があるため、依存関係管理チュートリアルでは、作業するプロジェクトとアプリケーションごとに個別の仮想環境を自動的に管理する、より高レベルのツールであるPipenvを紹介します。

12
Rotareti

名前と目的が似ているpythonモジュール/ライブラリ(組み込みおよびサードパーティ)がいくつかあるため、これは非常に良い質問です。OPの混乱に完全に共感できます。

実際には2つの異なる行動/責任があります:

1)。(システム)の異なるバージョンを切り替える機能Pythonインタプリタ例2.7.10または3.5.0など

2)。仮想環境(特定のバージョンのPythonのすべての配管(バイナリとライブラリ)を含む単なるローカルフォルダー)を作成する機能。これは、特定のpythonバージョンのフリーズされたローカルインスタンスと考えることができます。本質的には、自己完結型の軽量pythonインストールです。

pyvenvのようなモジュールは、上記の2)を提供します。これにより、作成に使用されたPython)のバージョンに設定された仮想環境を作成できます。

$ python --version
Python 3.5.0
$ pyvenv myenv   # myenv is now a local environment using Python 3.5.0

Pyvenvの詳細については、 library/venv を参照してください。

一方、pyenvのようなモジュール(名前は紛らわしいですよね?notice、pyenvであり、pyvenvではありません)、システムが基本的に実行しているpythonのバージョンを制御します。これにより、上記の1)が提供されます。したがって、pyvenvなどを介して特定の仮想環境を実行していない場合、これは使用中の「グローバル」バージョンです。実際、(ローカル構成などをセットアップすることもできるため)それよりも少し複雑ですが、基本的にはこれで十分です。

Pyenvの詳細については、 github.com/yyuu/pyenv を参照してください。

Pythonバージョン2.7.10および3.5.0を実行したい場合、pyenvを使用してこれら2つのバージョン(ここではグローバルとして選択)をインストールし、次を使用してこれを表示できます。

$ pyenv versions
  system
* 2.7.10 (set by ~/.pyenv/version)
* 3.5.0 (set by ~/.pyenv/version)

$ python --version
Python 3.5.0

$ which python
~/.pyenv/shims/python

$ python2.7 --version
Python 2.7.10

はい、上記で参照したモジュール/ライブラリのそれぞれにいくつかの著名な代替手段があります。 Reddit/SOFなどの詳細についての白熱した議論と、どちらが最善かについての議論。それらの多くは非常に似たようなことをします...

5
arcseldon