Python 移行ノート

私の Windows マシンでの Python のアップグレード作業に必要な手順について記す。まずは長期に亘り安定して利用してきた 2.6 から、 2.x 台最終版である 2.7 への移行作業を記す。

そして 2014 年夏、Windows 7 の 64 ビット機に Python 3.4 環境を構築する機会が訪れた。

さらに 2015 年秋、Windows 10 に無料アップグレードしてしばらくしてから Python 3.5 へ移行した。

Note

  • OS
    • Windows XP Home Edition SP3
    • Windows 7 Home Premium x64 SP1
    • Windows 10 Home x64
  • Python upgrading
    • from 2.6.6 to 2.7.3
    • from 2.7.3 to 3.4.1
    • from 3.4.1 to 3.5.0

2.6 から 2.7 への移行計画

実際のところ、手間をかけて 2.6 から 2.7 へ移行する利点は今のところなさそうに思える。それは 2.7 での新機能を勉強してから判断すればよい。とにかく、アップグレード手順を残しておく。

Python 2.6 site-packages の状態を保存

私の環境では pip がインストールされているハズなので、 2.6 環境にインストールしたサードパーティー製パッケージを書き出しておく。

ただし、バージョンは不要なので cut にて削っておく。

$ cd D:/Python26/lib/site-packages
$ pip freeze | cut -d= -f 1 > mypkgs.txt

後ほど mypkgs.txt をテキストエディターで編集する。

Python 2.7 本体をインストール

  • Python の公式サイトから python-2.7.3.msi をダウンロードする。
  • 普通に Explorer 上から実行して、Python 2.6 のインストール場所の隣りにインストールする。

Python 2.6 フォルダーから一部のファイルをコピーする

正直、この作業が必要なのかどうかわかっていない。

  • sitecustomize.py を 2.6 フォルダーの site-packages フォルダーから 2.7 フォルダーの対応する位置にコピーする。

最初に手動で準備するもの

  • setuptools: インストーラーを利用する。 setuptools-0.6c11.win32-py2.7.exe のようなファイル名のものをダウンロードページから取得する。

  • pip: pip.1.1-tar.gz を入手して、解凍後 setup.py を利用する。

    $ python27 setup.py install
    

Windows インストーラーを利用するもの

pip ではインストールできないものを先にインストールしておく。

と言うより、pip でインストールしたいパッケージ X がパッケージ Y に依存しているとして、 Y は Windows インストーラーでインストールするべきものであるとする。先に Y をインストールしておかないと、 pip で X をインストールする段になって、Y の扱いが怖いことになりそうだから、ここで述べる手順がある。

私の場合のパッケージ群は次の通り。インストーラーの拡張子は exe だったり msi だったりするが、気にしないで構わないだろう。

旧環境での pip freeze の出力を利用するもの

2.6 環境で pip freeze することで、利用中の site-packages パッケージが得られる。これを 2.7 環境の pip に食わせて様子見とする。

先ほど得た mypkgs.txt をテキストエディターで編集する。 PIL, NumPy などのインストーラーモノの行を削除して、このテキストファイルを上書きする。編集後、おもむろに下記コマンドラインを実行する。かなり時間がかかることを覚悟することだ。

$ cd D:/Python27/Scripts
$ ./pip install -r mypkgs.txt
  • 何度か失敗するかもしれないが、成功したものを mypkgs.txt から順次削除していき、再度 pip 呼び出しをすればよい。
  • ログを取るのもよいだろう。

特殊なもの

Subversion の Python binding を利用しているため、これをセットアップする。

2.6 のクリーンナップ

  • Windows のコントロールパネル「プログラムの追加と削除」を利用して、 Python 2.6 関連のパッケージを全部アンインストールする。
  • 念のため、残骸を確認するべし。自分で作った設定ファイルやらがある場合、適宜修正を加え 2.7 に引っ越す。
  • Python 2.6.6 をアンインストールするのはパッケージを全部片付けてからの最後。

ツールや環境変数の修正

移行、完全に個人的なメモ。他の人には通用しない作業だ。

.bashrc

この設定をする理由は、私が Cygwin で bash をインタラクティブシェルとして利用しており、そこから Windows 用の Python を呼び出すことが多いことによる。

エイリアス python27 を追加。

alias a='alias'
a python26='D:/Python26/python.exe'
a python27='D:/Python27/python.exe'

.bash_profile

$PATH に Python 関連の記述がある場合は修正する。設定理由は上述と同じ。

SendToCygwin.ini

「Cygwin に送る」というユーティリティがあり、私はこれを偏愛している。その設定ファイルを更新しておく。

*.py =python27 %F ||
*.pyw =python27 %F ||

環境変数 PATH

D:\Python26D:\Python27 に置換。

2.7 から 3.4 への移行

Python 自身のメジャーバージョンアップもさることながら、OS も 64 ビット対応のものである。

Python 3.4 本体をインストールする

次の 2 ステップで十分だ。

  • Python の公式サイトから python-3.4.1.amd64.msi をダウンロードする。
  • インストーラーを実行する。インストールオプションで pip が含まれるようにすること。

サードパーティー製パッケージのインストール

インストーラーからインストールするものと、pip でインストールするものに大別して作業することにした。

Windows インストーラーを利用するもの

筆者環境では、次のパッケージ群は Python Extension Packages for Windows - Christoph Gohlke のビルドを利用した。わかりやすさのため、インストーラーのファイル名そのものをここに記す。

  • matplotlib-1.3.1.win-amd64-py3.4.exe
  • numpy-MKL-1.8.2.win-amd64-py3.4.exe
  • Pillow-2.5.1.win-amd64-py3.4.exe
  • pygame-1.9.2a0.win-amd64-py3.4.exe
  • PyOpenGL-3.1.0.win-amd64-py3.4.exe
  • PyOpenGL-accelerate-3.1.0.win-amd64-py3.4.exe
  • pyparsing-2.0.2.win-amd64-py3.4.exe
  • scipy-0.14.0.win-amd64-py3.4.exe

PyQt5 など、それ以外のパッケージについては、それぞれの公式サイト提供のビルドを利用した。

旧環境での pip freeze の出力を利用するもの

  1. 旧環境 (2.7) の pip freeze の出力結果をテキストファイルに保存 (mypkgs.txt) する。
  2. mypkgs.txt を編集し、Windows インストーラーでインストールしたパッケージの行を削除する。
  3. 前回移行時と同様の手順に従う。
$ cd D:/Python34/Scripts
$ ./pip install -r mypkgs.txt

2.7 のクリーンナップ

前述の 2.6 のクリーンナップと同様。

ツールや環境変数の修正

SendToCygwin の Windows 7 版が存在しないことを除いて、前述と同様。

環境変数

以前は sitecustomize.py で行っていたエンコーディング関連の指定を環境変数設定で実現する。 Windows のユーザー環境変数に次のものを指定しておくのが具合がよい。

環境変数 設定値
PYTHONIOENCODING UTF-8
PYTHONPATH 自作モジュールのパス

ドットファイル

  • .bashrc の Python 関連のコードを修正。
  • .bash_profile の Python 関連のコードを修正。

2to3.py 関連

もっとも面倒な作業は、これまで自分が書いたすべての Python コードを Python 3 仕様に書き改めることだ。しかし $PYTHONDIR/Tools/Scripts/2to3.py で機械的に処理すれば一応は動きそう。

3.4 から 3.5 への移行

OS を Windows 10 にアップグレードしたときには 3.4 環境はビクともしなかった。なので、今回は OS を変えてから初めての Python のアップグレードになる。

Python 3.5 本体をインストールする

次の手順を踏む。

  1. Python の公式サイトから python-3.5.0-amd64.exe をダウンロードする。
  2. インストーラーを実行する。その際は次のような点に気を配りたい。
    • Customize installation を選択する。
    • pip は当然必要だ。
    • Install for all users をオンにして、インストールパスをそれらしい所に設定する。

Visual Studio 2015 の Visual C++ ランタイムをインストールする

Python 3.5 は VC++ 2015 でビルドされている。 Python 自身は上述のインストーラーを実施したら即動作するとはいえ、一部のサードパーティー製パッケージがこれを動作環境にあることを必要とする。そのため、Visual Studio 2015 がない環境では別途ランタイムをインストールしておくのが事実上必要な作業になっている。

  1. Google でよいので visual studio 2015 runtime などのキーワードで検索をする。
  2. Microsoft の提供するダウンロードページがヒットするはずなので、そこで 64 ビット版を入手する。
  3. インストーラーを実行する。オプションなし。

なお、Visual Studio 2015 をインストールする予定があれば Python のアップグレードよりもそれを優先するのがよい。

サードパーティー製パッケージをインストールする

むしろこちらがメインの作業だ。

Windows インストーラーを利用するもの

言い換えれば諸事情により pip に頼れないパッケージ群のことだ。各パッケージの公式サイトおよび Python Extension Packages for Windows - Christoph Gohlke が配布するインストーラーに頼る。

  • 拡張子が exemsi のファイルは、よくあるインストーラー。インストールの順序は任意でよいハズ。
  • 拡張子が whl のファイルについては、これらをダウンロードしておき pip に処理させるもの。依存パッケージがあるならば、先にインストールを済ませる必要がある。

コツとしては NumPy が一番最初にインストールを済ませるべきものであろう。

  • lxml-3.4.4-cp35-none-win_amd64.whl (Christoph)
  • matplotlib-1.4.3-cp35-none-win_amd64.whl (Christoph)
  • numpy‑1.10.0+mkl‑cp35‑none‑win_amd64.whl (Christoph)
  • pygame-1.9.2a0-cp35-none-win_amd64.whl (Christoph)
  • PyOpenGL-3.1.1a1-cp35-none-win_amd64.whl (Christoph)
  • PyOpenGL_accelerate-3.1.1a1-cp35-none-win_amd64.whl (Christoph)
  • reportlab-3.2.0-cp35-none-win_amd64.whl (Christoph)
  • scipy-0.16.0-cp35-none-win_amd64.whl (Christoph)

旧環境での pip freeze の出力を利用するもの

インストーラーによる作業がすべて終わってようやく pip が使える。

今回試したらインストーラーではなく pip で済むようになっていたパッケージは次のとおり。

  • Pillow (Pillow-3.0.0-cp35-none-win_amd64.whl)
  • PyOpenGL (PyOpenGL-3.1.0.tar.gz): ただしバージョンの関係で上述のインストーラーを採用する。

旧環境のクリーンナップ

  1. Windows のコントロールパネル「プログラムと機能」から 3.4 のパッケージと Python 本体をアンインストールする。
  2. D:Python34 フォルダーを削除する。中に入っている残骸がサードパーティー製パッケージの関連ファイルだけであることを確認できれば、そうする。

ツールや環境変数の修正

3.4 から 3.5 への移行に伴う変更は軽微な修正作業になる。

ドットファイル

Cygwin bash で作業をするため、主にエイリアスとパスに関わる項目の設定を更新する。

  • .bashrc の Python 関連のコードを修正。
  • .bash_profile の Python 関連のコードを修正。

ConEmu

ConEmu の Settings... > Startup > Tasks の Predefined tasks を更新する。一例を示す。

Task Command
{Python} D:\Python35\python.exe -i
{IPython} D:\Python35\Scripts\ipython3.exe
{isympy} D:\Python35\python.exe "D:\home\yojyo\devel\sympy\bin\isympy" -- --profile=sympy
  • IPython の各 profile は別途仕込んでおく。

残項目

  • PyQt5 の Python 3.5 版のインストール