4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows10のAnacondaで仮想環境にインストールしたパッケージがimportできない

Last updated at Posted at 2020-04-27

はじめに

Windows10のAnacondaで仮想環境を作成し、仮想環境にパッケージをインストールしたがimportできなかった。私の場合は環境変数の設定に問題がありました。

事象再現手順

仮想環境作成からパッケージのインストール、importの確認までの流れ。

> conda create -n py37 python==3.7
> activate py37
(py37) > conda install xxxx
> python
Python 3.7.7 (default, Apr 15 2020, 05:09:04) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import xxxx
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'xxxx'

原因

環境変数に下記の変数が設定されていた。昔の環境構築の際に設定してたみたいです。

PYTHONHOME=C:\Users\【ユーザー名】\Anaconda3
PYTHONPATH=C:\Users\【ユーザー名】\Anaconda3\Library\bin

これらが設定されている状態で環境を確認してみます。

これらの環境変数の本来の使い方ですが、PYTHONPATH自作のライブラリを格納したパスを指定します。パッケージ読み込み対象ディレクトリをsys.pathで出力すると、PYTHONPATHに追加したパスが追加されていることがわかります。

(py37) > python
Python 3.7.7 (default, Apr 15 2020, 05:09:04) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)

# 出力======================================================
# C:\Users\【ユーザー名】\Documents
# C:\Users\【ユーザー名】\Anaconda3\Library\bin <-- 追加されている
# C:\Users\【ユーザー名】\Anaconda3\envs\py37\python37.zip
# C:\Users\【ユーザー名】\Anaconda3\DLLs
# C:\Users\【ユーザー名】\Anaconda3\lib
# C:\Users\【ユーザー名】\Anaconda3\envs\py37
# C:\Users\【ユーザー名】\AppData\Roaming\Python\Python37\site-packages
# C:\Users\【ユーザー名】\Anaconda3
# C:\Users\【ユーザー名】\Anaconda3\lib\site-packages
# C:\Users\【ユーザー名】\Anaconda3\lib\site-packages\win32
# C:\Users\【ユーザー名】\Anaconda3\lib\site-packages\win32\lib
# C:\Users\【ユーザー名】\Anaconda3\lib\site-packages\Pythonwin

PYTHONHOMEは標準の Python libraries のパスを指定します。このPYTHONHOMEを削除してみると、パスが仮想環境に切り替わることがわかります。どうもPYTHONHOMEが設定されていると、仮想環境のactivate時にパッケージの読み込み先が正常に切り替わらないようです。

(py37) > python
Python 3.7.7 (default, Apr 15 2020, 05:09:04) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)

# 出力======================================================
# C:\Users\【ユーザー名】\Documents
# C:\Users\【ユーザー名】\Anaconda3\Library\bin
# C:\Users\【ユーザー名】\anaconda3\envs\py37\python37.zip <- 仮想環境になってる
# C:\Users\【ユーザー名】\anaconda3\envs\py37\DLLs <- 仮想環境になってる
# C:\Users\【ユーザー名】\anaconda3\envs\py37\lib <- 仮想環境になってる
# C:\Users\【ユーザー名】\anaconda3\envs\py37 <- 仮想環境になってる
# C:\Users\【ユーザー名】\AppData\Roaming\Python\Python37\site-packages
# C:\Users\【ユーザー名】\anaconda3\envs\py37\lib\site-packages <- 仮想環境になってる
# C:\Users\【ユーザー名】\anaconda3\envs\py37\lib\site-packages\win32 <- 仮想環境になってる
# C:\Users\【ユーザー名】\anaconda3\envs\py37\lib\site-packages\win32\lib <- 仮想環境になってる
# C:\Users\【ユーザー名】\anaconda3\envs\py37\lib\site-packages\Pythonwin <- 仮想環境になってる

解決法

PYTHONHOMEを削除する。

PYTHONPATHはあっても大丈夫ですが、私は不要だったので削除しました。

おまけ 他の環境変数

コマンドプロンプトでcondaを使えるようにするにはPathに下記のパスを追加します。

C:\Users\【ユーザー名】\Anaconda3\Scripts

コマンドプロンプトで、activateせずにpythonコマンドを使えるようにするにはPathに下記のパスを追加します。しかし、仮想環境をactivateすればpythonコマンドを使えますし、使用している仮想環境も明白なので、このパスの追加は不要だと思います。

なお、Windows10で追加する場合は、pythonコマンドでwindows storeが立ち上がってしまうので、優先順位を上に設定する必要があります。

C:\Users\【ユーザー名】\Anaconda3
C:\Users\【ユーザー名】\AppData\Local\Microsoft\WindowsApps
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps

上のやり方で、コマンドプロンプトでactivateせずにpythonコマンドを実行した際、DLLのパスが認識されないようで、下記のパスをPathに追加する必要があります。

C:\Users\【ユーザー名】\Anaconda3\Library\bin

おわりに

結局、特別な開発をしない限り、PythonをAnacondaで利用する場合はC:\Users\【ユーザー名】\Anaconda3\ScriptsだけPathに追加すれば良いと思います。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?