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エラーを生成する原因は何ですか?
あなたのコメントでこれがほとんど解決されていることは知っていますが、それは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を実行すると問題が発生する可能性があります。
これらのどれも機能しませんでした。 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実行可能ファイルを使用します。
同様の名前の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 を参照してください。
pythonバージョンを明示的に選択できます
mkvirtualenv -p python3 venvname
または
mkvirtualenv -p python2.7 venvname