# 3. Windows で Python を使う

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

## 3.1. Python のインストール

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

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

- DOS と Windows 3.x は Python 2.0 から廃止予定になり、Python 2.1 でこれらのシステム専用のコードは削除されました。
- 2.5 まで、 Python は Windows 95, 98, ME で動きました (ですが、すでにインストール時に廃止予定の警告を出していました)。 Python 2.6 (とその後の全てのリリース) は、これらの OS のサポートが止められ、新しいリリースは Windows NT ファミリーしか考慮されていません。
- Windows CE は今でもサポートされています。
- Cygwin インストーラも Python インタープリタのインストールを提供しています。(cf. Cygwin package source, Maintainer releases)

コンパイル済みインストーラが提供されているプラットフォームについての詳細な情報は Python for Windows (and DOS) を参照してください。

参考

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 /? を見てください。

参考

https://support.microsoft.com/kb/100843
  Windows NT の環境変数
https://support.microsoft.com/kb/310519
  Windows XP での環境変数の管理方法
https://www.chem.gla.ac.uk/~louis/software/faq/q1.html
  Setting Environment variables, Louis J. Farrugia

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

スタートメニューに自動的に作られた Python interpreter のメニューエントリを使うのと別に、DOSプロンプトから Python を実行したいかもしれません。そのためには、 `%PATH%` 環境変数に Python ディストリビューションのディレクトリを、セミコロンで他のエントリと区切って含めるように設定する必要があります。変数の設定例は次のようになります (最初の2つのエントリが Windows のデフォルトだと仮定します):

    C:\WINDOWS\system32;C:\WINDOWS;C:\Python25

コマンドプロンプトから python をタイプすると、 Python インタプリタを起動します。これで、スクリプトをコマンドラインオプション付きで実行することも可能です。 コマンドライン ドキュメントを参照してください。

### 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_USER` か `HKEY_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 スクリプト (`.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. 追加のモジュール

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

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

### 3.4.1. PyWin32

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

- Component Object Model (COM)
- Win32 API 呼び出し
- レジストリ
- イベントログ
- Microsoft Foundation Classes (MFC) ユーザーインターフェイス

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

参考

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

### 3.4.2. Py2exe

Py2exe は `distutils` 拡張 (Distutilsの拡張 を参照) で、 Python スクリプトを Windows 実行可能プログラム (`*.exe` ファイル) にラップします。これを使えば、ユーザーに Python のインストールをさせなくても、アプリケーションを配布することができます。

### 3.4.3. WConio

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

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

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

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

公式の Python リリースをビルドするのに使われている Microsoft Visual C++ コンパイラのために、ソースツリーはソリューション・プロジェクトファイルを含んでいます。適切なディレクトリにある `readme.txt` を参照してください。

ディレクトリ | MSVC バージョン | Visual Studio バージョン
--- | --- | ---
`PC/VC6/` | 6.0 | 97
`PC/VS7.1/` | 7.1 | 2003
`PC/VS8.0/` | 8.0 | 2005
`PCbuild/` | 9.0 | 2008

これらのビルドディレクトリの全てが完全にサポートされているわけではありません。使用しているバージョンの公式リリースが利用しているコンパイラのバージョンについては、リリースノートを参照してください。

ビルドプロセスに関する一般的な情報は `PC/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.6. その他のリソース

参考

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