47

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

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

.profileを確認し、設定VIRTUALENVWRAPPER_PYTHON/opt/local/bin/python。であるため、選択したPythonに関係なく、virtualenvwrapperが機能するはずです。

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

4

5 に答える 5

37

私はこれがあなたのコメントでかなり解決されていることを知っています、しかしそれはマックだけです、

さらに、正しい方法は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に関係なくvirtualenvwrapperが機能するようです。

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

「#!/ bin / python」を使用してpyファイルを実行する場合でも、virtualenvedになると問題が発生する可能性があります。

于 2012-05-10T13:09:47.103 に答える
19

これらのどれも機能しませんでした。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

これにより、workon もアクティブにapi_serverなり、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と、基本的に mkvirtualenv ディレクトリ/usr/local/bin/pythonのオプションに渡されます。-p

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

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

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

于 2016-11-10T21:25:42.763 に答える
-1

あなた(OP)は、python2.6ではなく、python2.7でvirtualenvとvirtualenvwrapperをインストールしたようです。シェルが virtualenvwrapper.sh スクリプトをロードするときに python2.6 が呼び出された場合、これは問題です。かなり簡単です。

VIRTUALENVWRAPPER_PYTHONそのような状況のために作られています。これにより、常に正しいバージョンの python を使用していることを確認でき、常にそれを追加する必要がなくなります。-p /path/to/python2.7

したがって、その場合のステファノの答えには同意しません.OPの状況では、.bashrcでどのpythonを使用するかを明確に説明する必要がありました。

...
export VIRTUALENVWRAPPER_PYTHON=/path/to/your/python2.7
source /path/to/bin/virtualenvwrapper.sh

そのように、それはいつも大丈夫なはずです!Virtualenvwrapper は、物事を簡素化するために行われます。

/opt/local/bin/pythonまた、選択したpythonのバージョンへのシンボリックリンクでなければならないことに注意してくださいport python select(必ずチェックしてくださいls -l /opt/local/bin/python)。

于 2012-10-11T10:42:49.367 に答える