Virtualenvでpython
がpipによってインストールされたモジュールを見つけられないという問題がありました。
私はそれを絞り込み、virtualenvがアクティブになっているときにpython
を呼び出すと、/usr/bin/python
ではなく/home/liam/dev/.virtualenvs/noots/bin/python
に到達することがわかりました。
Virtualenvでwhich python
を使用すると、次のようになります。
/home/liam/dev/.virtualenvs/noots/bin/python
Virtualenvで$PATH
変数を検索すると、次のようになります。
bash: /home/liam/dev/.virtualenvs/noots/bin:/home/liam/bin:/home/liam/.local/bin:/home/liam/bin:/home/liam/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
それでも実際にpython
を実行すると、/usr/bin/python
に移動します
混乱を避けるために、python3.5
を実行すると、正しいディレクトリからpython3.5が取得されます(つまり、/home/liam/dev/.virtualenvs/noots/bin/python3.5
)
とにかく/home/liam/dev/.virtualenvs/noots/bin/
には触れていません。 python
とpython3.5
は、どちらもそのディレクトリのpython3
にリンクされています。 /home/liam/dev/.virtualenvs/noots/bin/
へのトラバースと./python
、./python3
または./python3.5
の実行はすべて正常に機能します。
私がvirtualenvwrapper
を使用しているのは、それが違いを生む場合ですが、インストールのかなり前に、問題が最近発生したようですvirtualenv
とvirtualenvwrapper
which
にあるはずのプログラムを入手できない場合は、プラットフォームエグゼキューターよりもチェーンを上に調べる必要があります。シェルには通常、コマンドにエイリアスを付ける方法があり、ほとんどのユニキシシェルでは、alias
と入力するだけで、どのコマンドが再マッピングされたかを確認できます。次に、シェルの構成ファイルに移動してエイリアスを削除するだけです。
時々、人々はpython
をエイリアスして、どのpythonを使用すべきか)を整理しようとします。しかし、通常、他のより良い方法があります。私のLinuxマシンでは、例えばpython3
はパスに含まれていますが、実際に使用しているpythonへのシンボリックリンクです。
td@mintyfresh ~ $ which python3
/usr/bin/python3
td@mintyfresh ~ $ ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Feb 17 2016 /usr/bin/python3 -> python3.4
td@mintyfresh ~ $
pythonを実行している非シェルプログラムが私と同じものを取得し、仮想環境が自然に機能するため、これは素晴らしいことです。
このactivate
スクリプトにwrongVIRTUAL_ENV
パスが含まれていたため、私の問題は最近moved virtualenvを使用したプロジェクトを別の場所に移動したことです。
$ cat path_to_your_env/bin/activate
... # some declarations
VIRTUAL_ENV="/path_to_your_env/bin/python" # <-- THIS LINE
export VIRTUAL_ENV
... # some declarations
これを修正するには、activate
スクリプトのVIRTUAL_ENV
を更新します。
また、実際のpythonパスにリンクするには、bin/pip
の最初の行を修正する必要があるかもしれません。
tdelaney がコメントで示唆されているように、alias
を実行したところ、python
を/usr/bin/python3.5
に.bashrc
にエイリアスしていたことがわかりました。
私は.bashrc
からそのエイリアスを削除し、unalias python
、source ~/.bashrc
を実行して問題は解決しました。
Cygwinでは、/usr/bin/python
をF:\Python27\python.exe
にポイントするシンボリックリンクを作成した後でも、まだ問題があります。ここでは、source env/Scripts/activate
の後、which python
は/usr/bin/python
のままです。
久しぶりに解決策を見つけました。 virtualenv env
を使用する代わりに、シンボリックリンクを作成した場合でもvirtualenv -p F:\Python27\python.exe env
を使用する必要があります。
現在、同じ問題が発生しています。 VirtualenvはWindowsで作成されましたが、今はWSLから実行しようとしています。 virtualenvでは、python.exeをpython3.exeに名前変更しました(WSLにはpython3コマンドしかないため)。 $ PATHでは、virtualenvフォルダーが最初にあり、Pythonのエイリアスはありません。私は受け取ります which python3 /usr/bin/python3
。 /usr/bin/python3
symlink `python3-> python3.6があります。注文の解決には関係ないと思います。