3. Windows で Python を使う

このドキュメントは、 Python を Microsoft Windows で使うときに知っておくべき、 Windows 独特の動作についての概要を伝えることを目的としています。

3.1. Python のインストール

ほとんどの Unix システムやサービスと異なり、 Windows は Python に依存しておらず、プリインストールの Python はありません。しかし、 CPython チームは長年にわたり、コンパイル済みの Windows インストーラ (MSI パッケージ)を リリース 毎に用意しています。

Python の継続的な開発の中で、過去にサポートされていた幾つかのプラットフォームが (ユーザーや開発者の不足のために) サポートされなくなっています。全てのサポートされないプラットフォームについての詳細は PEP 11 をチェックしてください。

See Python for Windows for detailed information about platforms with pre-compiled installers.

参考

Python on XP
“7 Minutes to “Hello World!”” by Richard Dooling, 2006
Installing on Windows
in “Dive into Python: Python from novice to pro” by Mark Pilgrim, 2004, ISBN 1-59059-356-1
For Windows users
in “Installing Python” in “A Byte of Python” by Swaroop C H, 2003

3.2. 別のバンドル

標準の CPython の配布物の他に、追加の機能を持っている修正されたパッケージがあります。以下は人気のあるバージョンとそのキーとなる機能です:

ActivePython

マルチプラットフォーム互換のインストーラー、ドキュメント、 PyWin32

Enthought Python Distribution

(PyWin32 などの) 人気のあるモジュールとそのドキュメント、 Python の拡張をビルドするためのツールスイート

これらのパッケージは 古い バージョンの Python をインストールするかもしれないことに気をつけてください。

3.3. Python を構成する

Python を完全に動かすために、幾つかの環境設定を変更しなければならないかもしれません。

3.3.1. 補足: 環境変数の設定

Windows は環境変数を変更するためのビルトインのダイアログを持っています。 (以降のガイドは XP のクラシカルビューに適用されます。) マシンのアイコン(たいていデスクトップにあって “マイコンピュータ” と呼ばれます) を右クリックして、そこにある プロパティ を選択します。 詳細設定 タブを開いて、 環境変数 ボタンをクリックします。

ここまでのパスをまとめると:

マイコンピュータ ‣ プロパティ ‣ 詳細設定 ‣ 環境変数

このダイアログで、ユーザーとシステムの環境変数を追加したり修正できます。システム変数を変更するには、マシンへの無制限アクセス(管理者権限)が必要です。

環境に変数を追加するもう一つの方法は、 set コマンドを使うことです。

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

この設定を永続化するために、このコマンドラインを autoexec.bat に追加することができます。 msconfig はこのファイルを編集するGUIです。

もっと直接的な方法で環境変数を見ることができます。コマンドプロンプトはパーセント記号で囲まれた文字列を自動的に展開します。

echo %PATH%

この動作についての詳細は set /? を見てください。

参考

http://support.microsoft.com/kb/100843

Windows NT の環境変数

http://support.microsoft.com/kb/310519

Windows XP での環境変数の管理方法

http://www.chem.gla.ac.uk/~louis/software/faq/q1.html
Setting Environment variables, Louis J. Farrugia

3.3.2. Python 実行ファイルを見つける

バージョン 3.3 で変更.

自動的に作成される Python インタープリタのスタートメニュー項目を使うだけでなく、Python をコマンドプロンプトから起動したいと思うかもしれません。Python 3.3 では、インストーラにその設定を行うオプションがあります。

インストーラが %PATH% にインストールパスを追加するように、「Python 3.3 のカスタマイズ」画面で「python.exe を検索パスに追加する」オプションを有効にすることができます。これでコマンドプロンプトから python とタイプすると Python インタプリタが起動するようになります。これによって、スクリプトをコマンドラインオプション付きで実行することもできます。 コマンドライン ドキュメントを参照してください。

インストール時にこのオプションを有効化しなかった場合、インストーラを再実行して選びなおすことができます。

別の方法は、 補足: 環境変数の設定 の指示に従って手動で %PATH% を修正することです。 %PATH% 環境変数に Python ディストリビューションのディレクトリを、セミコロンで他のエントリと区切って含めるように設定する必要があります。変数の設定例は次のようになります (最初の2つのエントリが Windows のデフォルトだと仮定します):

C:\WINDOWS\system32;C:\WINDOWS;C:\Python33

3.3.3. モジュールの検索

Python は通常そのライブラリ (と site-packages フォルダ) をインストールしたディレクトリに格納します。そのため、 Python を C:\Python\ ディレクトリにインストールしたとすると、デフォルトのライブラリは C:\Python\Lib\ に存在し、サードパーティーのモジュールは C:\Python\Lib\site-packages\ に格納することになります。

以下は、 Windows で sys.path が構築される方法です:

  • 最初に空のエントリが追加されます。これはカレントディレクトリを指しています。

  • その次に、 PYTHONPATH 環境変数が存在するとき、 環境変数 で解説されているように追加されます。 Windows ではドライブ識別子 (C:\ など)と区別するために、この環境変数に含まれるパスの区切り文字はセミコロンでなければならない事に注意してください。

  • 追加で “アプリケーションのパス” を HKEY_CURRENT_USERHKEY_LOCAL_MACHINE の中の \SOFTWARE\Python\PythonCore\version\PythonPath のサブキーとして登録することができます。サブキーはデフォルト値としてセミコロンで区切られたパス文字列を持つことができ、書くパスが sys.path に追加されます。 (既存のインストーラーは全て HKLM しか利用しないので、 HKCU は通常空です)

  • PYTHONHOME が設定されている場合、それは “Python Home” として扱われます。それ以外の場合、 “Python Home” を推定するために Python の実行ファイルのパスから “目標ファイル” (Lib\os.py) が探されます。 Python home が見つかった場合、そこからいくつかのサブディレクトリ (Lib, plat-win, など) が sys.path に追加されます。見つからなかった場合、 core Python path はレジストリに登録された PythonPath から構築されます。

  • Python Home が見つからず、環境変数 PYTHONPATH が指定されず、レジストリエントリが見つからなかった場合、関連するデフォルトのパスが利用されます (例: .\Lib;.\plat-win など)。

結果としてこうなります:

  • python.exe かそれ以外の Python ディレクトリにある .exe ファイルを実行したとき (インストールされている場合でも PCbuild から直接実行されている場合でも) core path が利用され、レジストリ内の core path は無視されます。それ以外のレジストリの “application paths” は常に読み込まれます。

  • Python が他の .exe ファイル (他のディレクトリに存在する場合や、COM経由で組み込まれる場合など) にホストされている場合は、 “Python Home” は推定されず、レジストリにある core path が利用されます。それ以外のレジストリの “application paths” は常に読み込まれます。

  • Python が Python home ディレクトリを見つけられずレジストリも存在しない場合 (例: freeze された .exe, いくつかのとても奇妙なインストール構成)、デフォルトの、ただし相対パスが利用されます。

3.3.4. スクリプトを実行する

Python 3.3 では、Python は Python スクリプトの実行を容易にするためのランチャを含んでいます。詳しくは、Windows の Python ランチャ をご覧ください。

3.3.5. Python ランチャを使わずにスクリプトを実行する

Python ランチャーがインストールされていない場合、 Python スクリプト (.py 拡張子を持ったファイル) はデフォルトで python.exe によって起動されます。この実行ファイルは、プログラムが GUI を使う場合でもターミナルを開きます。 ターミナル無しでスクリプトを実行したい場合は、拡張子 .pyw を使うとそのスクリプトが デフォルトでは pythonw.exe で実行されるようになります。 (2つの実行ファイルは両方とも Python をインストールしたディレクトリの直下にあります。) pythonw.exe は起動時にターミナルを開きません。

全ての .py スクリプトを pythonw.exe で実行するように設定することもできます。例えば (管理者権限が必要):

  1. コマンドプロンプトを起動する。

  2. .py スクリプトに正しいファイルグループを関連付ける:

    assoc .py=Python.File
    
  3. 全ての Python ファイルを新しい実行ファイルにリダイレクトする:

    ftype Python.File=C:\Path\to\pythonw.exe "%1" %*
    

3.4. Windows の Python ランチャ

バージョン 3.3 で追加.

Windows の Python ランチャは、異なる Python のバージョンの位置の特定と実行を助けるユーティリティです。スクリプト (またはコマンドライン) で特定の Python のバージョンの設定を与えられると、位置を特定し、そのバージョンを実行します。

3.4.1. 最初に

3.4.1.1. コマンドラインから起動する

ランチャが PATH に含まれていることを確認してください。どのようにインストールされたかによりますが、おそらく既に PATH に含まれているでしょう。ただ、そうでなかった時のために一応確認してください。

コマンドラインプロンプトから、以下のコマンドを実行してください。

py

インストールされている最新の Python 2.x が起動するはずです。通常どおりに終了することもできますし、追加のコマンドライン引数を指定して直接 Python に渡すこともできます。

もし複数のバージョンの Python 2.x (たとえば 2.6 と 2.7) がインストールされていたら、Python 2.7 が起動することになります。Python 2.6 を起動したいなら、以下のコマンドを実行してみてください。

py -2.6

もし、Python 3.x がインストールされているなら、以下のコマンドを実行してみてください。

py -3

最新バージョンの Python 3.x が起動するのがわかるはずです。

3.4.1.2. スクリプトから起動する

テスト用の Python スクリプトを作成しましょう。hello.py という名前で以下の内容のファイルを作成してください。

#! python
import sys
sys.stdout.write("hello from Python %s\n" % (sys.version,))

hello.py が存在するディレクトリで、下記コマンドを実行してください。

py hello.py

インストールされている最新の Python 2.x のバージョン番号が表示されるはずです。では、1行目を以下のように変更してみてください。

#! python3

コマンドを再実行すると、今度は最新の Python 3.3 の情報が表示されるはずです。これまでのコマンドラインの例と同様に、より細かいバージョン修飾子を指定することもできます。Python 2.6 がインストールされている場合、最初の行を #! python2.6 に変更すると、2.6 のバージョン情報が表示されるはずです。

3.4.1.3. ファイルの関連付けから起動する

インストール時に、ランチャは Python ファイル (すなわち .py, .pyw, .pyc, .pyo ファイル) に関連付けられたはずです。そのため、これらのファイルを Windows のエクスプローラーでダブルクリックした際はランチャが使われ、上で述べたのと同じ機能を使ってスクリプトが使われるべきバージョンを指定できるようになります。

このことによる重要な利点は、単一のランチャが先頭行の内容によって複数の Python バージョンを同時にサポートできることです。

3.4.2. シェバン行

スクリプトファイルの先頭の #! で始まる行は、シェバン (shebang) 行として知られています。Linux などの Unix 系 OS はこうした行をもともとサポートしているため、それらのシステムでは、スクリプトがどのように実行されるかを示すために広く使われます。Windows の Python ランチャは、Windows 上の Python スクリプトが同じ機能を使用できるようにし、上の例ではそれらの機能の使用法を示しています。

Python スクリプトのシェバン行を Unix-Windows 間で移植可能にするため、このランチャは、どのインタプリタが使われるかを指定するための大量の ‘仮想’ コマンドをサポートしています。サポートされる仮想コマンドには以下のものがあります。

  • /usr/bin/env python
  • /usr/bin/python
  • /usr/local/bin/python
  • python

具体的に、もしスクリプトの1行目が

#! /usr/bin/python

で始まっていたら、デフォルトの Python の位置が特定され、使用されます。多くの Unix 上で動作する Python スクリプトにはすでにこの行が存在する傾向がありますので、ランチャによりそれらのスクリプトを修正なしで使うことができるはずです。あなたが新しいスクリプトを Windows 上で書いていて、Unix 上でも有用であってほしいと思うなら、シェバン行のうち /usr で始まるものを使用すべきです。

3.4.3. シェバン行の引数

シェバン行では Python インタプリタに渡される追加の引数を指定することもできます。たとえば、シェバン行に以下のように書かれているとしましょう。

#! /usr/bin/python -v

この場合、Python は -v オプション付きで起動するでしょう。

3.4.4. カスタマイズ

3.4.4.1. INI ファイルによるカスタマイズ

ランチャは2つの .ini ファイルを探しに行きます。具体的には、現在のユーザーの “application data” ディレクトリ (Windows の関数 SHGetFolderPath に CSIDL_LOCAL_APPDATA を与えて呼ぶと返ってくるディレクトリ) の py.ini と、ランチャと同じディレクトリにある py.ini です。’コンソール’ 版のランチャ (つまり py.exe) と ‘Windows’ 版のランチャ (つまり pyw.exe) は同一の .ini ファイルを使用します。

“application data” ディレクトリで指定された設定は、実行ファイルの隣にあるものより優先されます。そのため、ランチャの隣にある .ini ファイルへの書き込みアクセスが出来ないユーザは、グローバルな .ini ファイル内のコマンドを上書き (override) することができます。

3.4.4.2. デフォルトのPythonバージョンのカスタマイズ

どのバージョンの Python をコマンドで使用するかを定めるため、バージョン修飾子がコマンドに含められることがあります。バージョン修飾子はメジャーバージョン番号で始まり、オプションのピリオド (‘.’) とマイナーバージョン指定子がそれに続きます。もしマイナー修飾子が指定されれば、オプションでさらに “-32” を続けて、そのバージョンの 32-bit の実装が使われることを示すことができます。

たとえば、#!python というシェバン行はバージョン修飾子を含みませんが、#!python3 はメジャーバージョンを指定するバージョン修飾子を含みます。

コマンドにバージョン修飾子が見つからない場合、環境変数 PY_PYTHON を設定してデフォルトバージョン修飾子を指定することができます。デフォルト値は “2” になっています。この値は、単にメジャーバージョン (例えば “2”) にすることも、major.minor 修飾子 (例えば “2.6”) にすることも、さらには major.minor-32 にすることもできます。

マイナーバージョン修飾子が見つからない場合、環境変数 PY_PYTHON{major} (ここで {major} は、上記で決定された現在のメジャーバージョン修飾子) を設定して完全なバージョンを指定することができます。そういったオプションが見つからなければ、ランチャはインストール済みの Python バージョンを列挙して、見つかったそのメジャーバージョン向けマイナーリリースのうち最新のものを使用します。保証されているわけではありませんが、通常はそのメジャーバージョン系で最も後にインストールしたバージョンになります。

64-bit Windows で、同一の (major.minor) Python バージョンの 32-bit と 64-bit の両方の実装がインストールされていた場合、64-bit バージョンのほうが常に優先されます。これはランチャが 32-bit と 64-bit のどちらでも言えることで、32-bit のランチャは、指定されたバージョンが使用可能であれば、64-bit の Python を優先して実行します。これは、どのバージョンが PC にインストールされているかのみでランチャの挙動を予見でき、それらがインストールされた順番に関係なくなる (つまり最後にインストールされた Python とランチャが 32-bit か 64-bit かを知らなくともよい) ようにするためです。上に記したとおり、オプションの “-32” サフィックスでこの挙動を変更できます。

例:

  • 関連するオプションが設定されていない場合、python および python2 コマンドはインストールされている最新の Python 2.x バージョンを使用し、python3 コマンドはインストールされている最新の Python 3.x を使用します。

  • python3.1 および python2.7 コマンドは、バージョンが完全に指定されているため、全くオプションを参照しません。

  • PY_PYTHON=3 の場合、python および python3 コマンドはともにインストールされている最新の Python 3 を使用します。

  • PY_PYTHON=3.1-32 の場合、python コマンドは 32-bit 版の 3.1 を使用しますが、python3 コマンドはインストールされている最新の Python を使用します (メジャーバージョンが指定されているため、PY_PYTHON は全く考慮されません)。

  • PY_PYTHON=3PY_PYTHON3=3.1 の場合、python および python3 はどちらも 3.1 を使用します。

環境変数に加え、同じ設定をランチャが使う INI ファイルで構成することができます。INI ファイルの該当するセクションは [defaults] と呼ばれ、キー名は環境変数のキー名から PY_ という接頭辞を取ったものと同じです (INI ファイルのキー名は大文字小文字を区別しないことにご注意ください)。環境変数の内容は INI ファイルでの指定を上書きします。

例えば:

  • PY_PYTHON=3.1 と設定することは、INI ファイルに下記が含まれることと等価です。

[defaults]
python=3.1
  • PY_PYTHON=3PY_PYTHON3=3.1 を設定することは、INI ファイルに下記が含まれることと等価です。

[defaults]
python=3
python3=3.1

3.4.5. 診断

環境変数 PYLAUNCH_DEBUG が設定されていたら、設定値が何であっても、ランチャは診断情報を stderr (つまりコンソール) に出力します。この情報のメッセージは詳細で しかも きついものですが、どういったバージョンの Python が検知されたか、なぜ特定のバージョンが選択されたか、そして、対象の Python を実行するのに使われた正確なコマンドラインを教えてくれます。

3.5. 追加のモジュール

Python は全プラットフォーム互換を目指していますが、 Windows にしかないユニークな機能もあります。標準ライブラリと外部のライブラリの両方で、幾つかのモジュールと、そういった機能を使うためのスニペットがあります。

Windows 専用の標準モジュールは、 MS Windows 固有のサービス に書かれています。

3.5.1. PyWin32

Mark Hammond によって開発された PyWin32 モジュールは、進んだ Windows 専用のサポートをするモジュール群です。このモジュールは以下のユーティリティを含んでいます:

PythonWin は PyWin32 に付属している、サンプルのMFCアプリケーションです。これはビルトインのデバッガを含む、組み込み可能なIDEです。

参考

Win32 How Do I...?
by Tim Golden
Python and COM
by David and Paul Boddie

3.5.2. cx_Freeze

cx_Freeze is a distutils extension (see Distutilsの拡張) which wraps Python scripts into executable Windows programs (*.exe files). When you have done this, you can distribute your application without requiring your users to install Python.

3.5.3. WConio

Python の進んだターミナル制御レイヤである curses は、 Unix ライクシステムでしか使うことができません。逆に Windows 専用のライブラリ、 Windows Console I/O for Python があります。

WConio は Turbo-C の CONIO.H のラッパーで、テキストユーザーインタフェースを作成するために利用することができます。

3.6. Windows 上で Python をコンパイルする

CPython を自分でコンパイルしたい場合、最初にするべきことは ソース を取得することです。 最新リリース版のソースか、新しい チェックアウト をダウンロードすることができます。

ソースツリーには Microsoft Visual C++ 用のビルド用ソリューションとプロジェクトファイルが含まれています。Visual C++ は公式の Python リリースをビルドするのに使われているコンパイラです。以下の各ディレクトリの readme.txt をご覧ください。

ディレクトリ

MSVC バージョン

Visual Studio バージョン

PC/VC6/ 6.0 97
PC/VS7.1/ 7.1 2003
PC/VS8.0/ 8.0 2005
PC/VS9.0/ 9.0 2008
PCbuild/ 10.0 2010

PC ディレクトリ内のビルドディレクトリはいずれも、必ずしも完全にサポートされているわけではないことにご注意ください。PCbuild ディレクトリは公式リリースをビルドするのに使われるコンパイラのためのファイルを含んでいます。

ビルドプロセスについての一般的な情報は、PCbuild/readme.txt にあります。

拡張モジュールについては、 Windows 上での C および C++ 拡張モジュールのビルド を参照してください。

参考

Python + Windows + distutils + SWIG + gcc MinGW
or “Creating Python extensions in C/C++ with SWIG and compiling them with MinGW gcc under Windows” or “Installing Python extension with distutils and without Microsoft Visual C++” by Sébastien Sauvage, 2003
MingW – Python extensions
by Trent Apted et al, 2007

3.7. その他のリソース

参考

Python Programming On Win32
“Help for Windows Programmers” by Mark Hammond and Andy Robinson, O’Reilly Media, 2000, ISBN 1-56592-621-8
A Python for Windows Tutorial
by Amanda Birmingham, 2004
PEP 397 - Python launcher for Windows

Python の配布物へのランチャ同梱の提案。