web-dev-qa-db-ja.com

virtualenvwrapperでpythonの異なるバージョンを使用する

Macportsを使用して、Macにpythonのさまざまなバージョンをインストールしました。$ port select python python27を介してpython 2.7を選択した場合、virtualenvwrapperは完全に機能します。 。

しかし、Pythonの別のバージョン、つまり2.6を選択すると、virtualenvwrapperはエラーメッセージを生成します:ImportError:virtualenvwrapper.hook_loaderという名前のモジュールはありません

.profileを確認し、VIRTUALENVWRAPPER_PYTHON/opt/local/bin/pythonに設定しているため、virtualenvwrapperは、どのpython選択したかに関係なく動作するはずです。

pythonバージョンを切り替えたときにvirtualenvwrapperが.hook_loaderエラーを生成する原因は何ですか?

29
wmfox3

あなたのコメントでこれがほとんど解決されていることは知っていますが、それはMacのみです、

さらに、正しい方法は、VIRTUALENVWRAPPER_PYTHONを実際のpythonコマンドラインで使用しているものに設定することです。

確実にwhich pythonを実行できます。

実際には、次のこともできます。

export VIRTUALENVWRAPPER_PYTHON=`which python`

Linuxでは、.bashrcでこれを行うので、virtualenvをインストールし、最初の「仮想環境」virtualenv(元の方法)を作成したと仮定すると、全体的に

. virtualenv/bin/activate
export WORKON_HOME=$HOME/.virtualenvs # or whatever else you want
export VIRTUALENVWRAPPER_PYTHON=`which python`
export PROJECT_HOME=SOMETHING
source $HOME/virtualenv/bin/virtualenvwrapper.sh # or wherever else you got that installed

(そしてところで、あなたは書いた:

.profileを確認し、VIRTUALENVWRAPPER_PYTHONを/ opt/local/bin/pythonに設定しているため、仮想環境ラッパーはどのpython

これは実際には逆です-virtualenvは正しいpython(およびそれに付随するパッケージ)の使用に依存しているため、それに応じてpythonパスを設定することが非常に重要です。

"#!/ bin/python"でpyファイルを実行しても、virtualenvedを実行すると問題が発生する可能性があります。

29
Stefano

これらのどれも機能しませんでした。 osxマシンをセットアップするときに最初にPython3をインストールしました。pipとすべてがデフォルトです。

まず、どのpythonをインストールしたかを確認します。

$ `which python` -V

これが「Python 2.7.12」を返す場合、実行するように設定されています:

$ mkvirtualenv -p `which python` api_server
Running virtualenv with interpreter /usr/local/bin/python
New python executable in /Users/eric/.virtualenvs/api_server/bin/python2.7
Also creating executable in /Users/eric/.virtualenvs/api_server/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/get_env_details

これにより、api_server workonもアクティブになり、python実行可能ファイル:

$ which python
/Users/eric/.virtualenvs/api_server/bin/python
$ python -V
Python 2.7.12

which pythonは実際に何をしますか? PATHで見つかった実行可能ファイルpythonのディレクトリ:

$ which python
/usr/local/bin/python

which pythonを使用することにより、基本的に/usr/local/bin/pythonをmkvirtualenvディレクトリの-pオプションに渡します。

which pythonで複数のpython実行可能ファイルが返された場合)どうなりますか?必要なものを見つけて渡します:

$ mkvirtualenv -p /usr/local/bin/python3 api_server

そして、virtualenvwrapperは代わりにpython実行可能ファイルを使用します。

17
eduncan911

同様の名前の2つの環境変数の使用を確認しました。

VIRTUALENVWRAPPER_PYTHON-virtualenvwrapperユーティリティ自体が使用するPythonバージョン。言い換えると、Pythonのどのバージョンがvirtualenvwrapperを実行するか、そのPythonバージョンがvirtualenvwrapperスクリプトファイルの#!行で明示的に名前が付けられているかのように。

VIRTUALENV_PYTHON-新しい仮想環境を作成するときにvirtualenvによってインストールされるPythonバージョン。 virtualenvコマンドラインの-p / --pythonオプションと同等です。

そしておそらく明らかに:)仮想環境で実行されるPythonのバージョンは、その環境にインストールするバージョンです。envの作成後は、上記の環境変数とは関係ありません。

Virtualenv内でPythonをアップグレードする方法については、 https://stackoverflow.com/a/24724360/763269 を参照してください。

9
Chris Johnson

pythonバージョンを明示的に選択できます

mkvirtualenv -p python3 venvname

または

mkvirtualenv -p python2.7 venvname
8
Dos