Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

virtutalenv絡みで、Pythonと環境変数についてちょっと調べた

virtualenvは環境変数を変更することで、仮想環境を作り出しているらしい。

そこで、

  1. 環境変数とはどういうもので、

  2. Pythonではどう使われていて、

  3. virtualenvではどう使われているのか

について、少し調べてみた。たぶん間違いもあると思います。

環境変数とは

一言で言えば、Windowsシステム全体のプログラムが共有する変数のこと。

Windowsシステムが使用する環境変数は、特別な意味を持つ。 例えばPATH変数は、「プログラムを実行するときにそのフォルダを探す」という意味を持つ。

環境変数をマスターする [Javaプログラミング] All About

virtualenv絡みでは、PYTHONPATH と PYTHONHOME がよく出てくるので、それについて調べてみる。

PYTHONが使う環境変数

まとめると、こんな意味らしい。

PYTHONHOMEは Pythonに共通で含まれる標準ライブラリのパスを、 PYTHONPATHは Pythonに追加されるモジュールファイルの検索パスを追加するらしい。

PYTHONHOME(原文)

標準 Python ライブラリの場所を変更します。デフォルトでは、ライブラリは prefix/lib/pythonversion と exec_prefix/lib/pythonversion から探されます。ここで、 prefix と exec_prefix はインストール依存のディレクトリで、両方共デフォルトでは /usr/local です。

PYTHONHOME が1つのディレクトリに設定されている場合、その値は prefix と exec_prefix の両方を置き換えます。それらに別々の値を指定したい場合は、 PYTHONHOME を prefix:exec_prefix のように指定します。

PYTHONPATH(原文)

モジュールファイルのデフォルトの検索パスを追加します。この環境変数のフォーマットはシェルの PATH と同じで、 os.pathsep (Unix ならコロン、 Windows ならセミコロン) で区切られた1つ以上のディレクトリパスです。存在しないディレクトリは警告なしに無視されます。

通常のディレクトリに加えて、 PYTHONPATH のエントリはピュアPython モジュール(ソース形式でもコンパイルされた形式でも) を含む zip ファイルを参照することもできます。拡張モジュールは zip ファイルの中から import することはできません。

デフォルトの検索パスはインストール依存ですが、通常は prefix/lib/pythonversion で始まります。 (上の PYTHONHOME を参照してください。) これは 常に PYTHONPATH に追加されます。

上の インターフェイスオプション で説明されているように、追加の検索パスディレクトリが PYTHONPATH の手前に追加されます。検索パスは Python プログラムから sys.path 変数として操作することができます。

[http://docs.python.jp/2/using/cmdline.html#using-on-envvars:title]

ちなみに、実行中のPythonインタプリタから上記pathを調べるには、インタプリタ上で

import sys
sys.path

を打てばOK。

ここで出てくるpathは、このように決まっているらしい。

カレントディレクトリを自動的に登録する。最初の空文字列”がこれです。
環境変数PYTHONPATHがあれば、そこに指定されたディレクトリを登録する。
レジストリにPythonPathエントリがあれば、そこで指定されたディレクトリを登録する。
環境変数PYTHONHOMEが設定されていれば、そこから、なければ、python.exeのあるディレクトリから、Lib\os.pyを特定し、PYTHONHOMEを推定して、必要なサブディレクトリをsys.pathに登録する。
PYTHONHOMEもPYTHONPATHも特定できず、レジストリのエントリもない場合は、デフォルトの相対パスが使われる。
モジュール検索パスに、拡張子 .pth のファイルがあれば、そこに書かれたパス(相対パスでも絶対パスでもよい)を、sys.path の最後に付け加える。

Python2.7 と Python3.3 を Windows で併用する | ユニマージュ

virtualenvがやっていること

activate.batをちょっと見てみたけど、理解できず中断。

期待された方、ごめんなさい。

わかる方、教えてください。