Windows上複数のpython環境でパス解決にハマった問題解決メモ
WindowsでPython環境が複数インストールされている時にありがちな、(パッケージがインストールされている場所)のパス解決問題についてです。ややこしいものです。
環境
OS 環境:Windows7 Enterprise Edition (64-bit) SP1
Python 環境:Python 2.6(ArcGIS Desktopから)とPython2.7(Python Canopyから)
*ここでWindowsシェルとCLI(Command Line Interface)という用語を同じ意味で使います(Command Promptに限らずその他Windowsで使えるシェルにも該当する内容という意味で使っています)。
背景
Windowsシステムに最初からArcGIS 10インストールの一部としてPython2.6の環境が入っていました。その後IDLEとEnthoughtのCanopy(Python用のIDE・エディターのバンドル)としてPython2.7の環境をインストールしました。
問題の概要
多くの場合、Canopyのパッケージマネージャーやpipからインストールしたライブラリーを使った時に、CanopyやIDLEからimportが無事に解決できても、今度Windows CLIなどのシステムシェルからImportErrorになります。
解決メモ
まず、Canopyの使うPython環境とWindowsシェルが呼びだす、システムのデフォルトPython環境は違うようです。(システムが呼びだすデフォルト環境は、ArcGISからシステムにPython環境が初めてインストールされた時に設定されたと思われます。)
1.呼び出したいパッケージの場所を確認
今回はyamlとawsscliのインポートしたく検索かけます。すると、AppData¥Local¥Enthought¥Canopy¥User¥Lib¥site-packagesにyamlがありました。
awscliがAppData¥Roaming¥Python¥Python27¥site-packagesにありました。
ついでに、pipのインストールダイレクトリーを確認:
pipもPython27¥site-packagesを利用しているそうです。
つまりPythonにこの二つのダイレクトリーを利用して貰う必要あります。
2.システムとCanopyがそれぞれ参照しているPATH変数を確認しました。
import sys
print(sys.path)
Canopyからの出力:
いっぱい出ますね。予想通りに
AppData¥Local¥Enthought¥Canopy¥User¥Lib¥site-packages
AppData¥Roaming¥Python¥Python27¥site-packages
が入っています。
Windows CLIからの出力:
やっぱりほぼArcGISのPython2.6環境を参照していますね。
上記二つダイレクトリーが入っていません。
*これがシステムからCanopyやpipからインストールしたものが見つからない原因です。
3.Pythonがパッケージ検索に使うパスを指定しないと!
まずは、Pythonはimportの時どこでパッケージを探すのでしょうか?
1) Built-in(最初からPythonに入ってる組み込みモジュール)を探す
2)そこになければ現在のダイレクトリー(pwd)で探す
3) そこになければPYTHONPATH変数の各ダイレクトリーで探す
4) そこになければPythonのセットアップ時に指定されたデフォルトダイレクトリーで探す(今回多分ArcGISのPython2.6用ダイレクトリーになります)
yamlとawscliは(1)、(2)、(4)でもないので弄るのは(3)ですね。。
これに関して様々な方法があります。
-Pythonシェルからpath変数に直接ダイレクトリー名を追加することも出来ます →
複数のPython環境が入っている場合、各環境から個別で設定する必要があってめんどくさいです
-Windowsの環境変数を設定するという方法 →
全Python環境に影響するのでこれで行きました。
*ちなみに、似てるがWindowsのPATH 変数で設定はNGです。
PythonPathはWindowsのシステムPATH変数を参照しません。
システムにPYTHONPATHが設定されていなかったので新規変数として追加しました。
SyntaxはWindowsのPATH変数と変わらないです。
PYTHONPATHに以下入れました:
AppData¥Local¥Enthought¥Canopy¥User¥Lib¥site-packages;AppData¥Roaming¥Python¥Python27¥site-packages
4.PythonのPathが更新されたことを確認
Windowsシェルを再起動し、sys.pathを出力するスクリプトを呼びだす。
今回の出力は以下です:
それで、もう一回yamlをimportするpythonスクリプトをWindowsシェルから呼び出します。
今回ImportError無しです。
...という訳で、IDEやpipでインストールし、IDEやPythonシェルでインポート出来るがWindowsのシェルからインポート出来ないパッケージの問題に関しては、PYTHONPATHのシステム変数を設定することで割と楽々にパス解決が出来ます。
詰まった時に是非試してみてください。
(Windowsめんどい~)
Author And Source
この問題について(Windows上複数のpython環境でパス解決にハマった問題解決メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/zreactor/items/5734e266a4b5d7872fad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .