Pythonは、マイクロバージョンだけアップグレードしている限りはバージョンを意識しないで使い続けられます(すなわち、3.6.1 ▶ 3.6.2 ▶ 3.6.3 のようなアップグレードだけを行う)。
しかし、Pythonとの付き合いが長くなると、どうしても 3.5 ▶ 3.6 のように新しいバージョンに移行することになり、その結果1台のマシンに複数バージョンのPythonが存在するようになってしまいます(例えば、3.3、3.5、3.6)。
バージョンアップしても、問題なく以前作成したプログラムが動いてくれればよいのですが、動かなくなった場合には、バージョンを切り替えて運用する方法を検討することになります(そのためにも、旧バージョンはアンインストールしないでください)。
わかりやすいPythonのなかで、バージョン管理の問題は、例外的に扱いにくい所です。他のプログラミング言語に慣れている場合、とても煩わしく感じます(実は私も当初この問題のせいで、Pythonに二の足を踏んでいました。でも、今はPythonの自由な一面だと考えています)。
言い換えれば、この問題を解消すれば、Pythonはさらに身近になります。
そして嬉しいことに、Windows版のPython3.3からデフォルトでインストールされるPythonランチャー(py.exe
)のおかげで、とても扱いやすくなりました。ここでは、Pythonランチャーによる複数バージョンの扱い方を説明します。
Macにはpyenv
Macで複数バージョンを管理するには、pyenvが便利です。Homebrewで簡単にインストールできます。
pyenv : Simple Python version management
本サイトでは仮想環境については触れません
モジュール(ライブラリ)についても、バージョンアップに伴う互換性の問題があります。通常は、pyvenvコマンドを用いて、プロジェクトごとに仮想環境を作成することで、この問題に対応します。
しかし、仮想環境はなかなか理解しづらく、一般のビジネスパーソンを対象にしている本サイトでは扱いません。本サイトではメジャーなライブラリばかり使用しており、互換性に配慮されていることが多いので、問題は少ないと考えています(場合により、軽微な修正で対応)。
Pythonのバージョンアップ(グレードアップ)の種類
まず、Pythonのバージョンアップには、どのような種類があるかまとめておきます。
Python2 ▶ Python3のような、メジャーバージョンは滅多にアップグレードされませんが、以下の2つの新しいバージョンは比較的よくリリースされています。
- 新しいマイナーバージョン(例:3.5 ▶ 3.6)
- 新しいマイクロバージョン(例:3.6.3 ▶ 3.6.4)
マイナーバージョンは、いわゆる「機能リリース」に相当し、比較的大きな改善などが実施されます。新しいバージョンは、既存のバージョンとは別にインストールされます。概ね18箇月ごとにリリースされます。
一方、マイクロバージョンは、「バグ修正リリース」に相当し、新しいバージョンをインストーラーの通りにインストールすると旧バージョンは置き換えられます。概ね6箇月ごとにリリースされます(状況によりもっと頻繁に実施されることもあります)。
マイクロバージョン間については、互換性が保証されています。すなわち、3.6.3
で動作するプログラムは、3.6.4
でも問題なく動きます。
インストール先はマイナーバージョンごと
インストーラーの通りにインストールすると、インストール先は以下のようにマイナーバージョンごとになります。すなわち、3.6.3
は3.6.4
で上書きされます。
Python35-32は、Pytyon3.5の32ビット版の意味です。コマンドプロンプトでpy --list-paths
を実行すると、以下のようにすべてのバージョンのインストール先を確認できます(画像は3.6と3.7をインストールしている場合です)。
Pythonのインストール場所について(Windows)
マイクロバージョン間ではインストーラーはアップグレードを促す
3.6.3
がインストールされている状態で、3.6.4
をインストールしようとすると、アップグレード用の画面が表示されます。ここで、「Upgrade Now」を選択すると、設定はそのままの状態で3.6.4
にアップグレードできます。
pyファイルはPythonランチャーに関連付けられる
Windowsでは、*.py
をダブルクリックするだけでPythonを実行できますが、その時直接オリジナルのpython.exe
の方ではなく、py.exe
(Pythonランチャー)が呼び出されます。
以下のように、*.py
にC:¥Windowsにあるpy.exe
が関連付けられているのがわかります。
assoc
コマンドで、py拡張子に関連付けられている「ファイルタイプ」を調べ、ftype
コマンドでそのファイルタイプがどのプログラム実行に定義されているかを確認できます。
Pythonランチャーは、複数のバージョンのなかから、一番新しいバージョンで実行してくれます。
例えば、3.5
と3.6
がインストールされているマシンで、PATHで3.5
の方が優先される場合でも、以下のようにPythonランチャーでは新しい3.6
が実行されます。
PythonランチャーではPythonフォルダのPATH登録は不要
コマンドプロンプトで、python
コマンドを実行(例えば、上記のpython -V
)するには、インストール時に「Add Python 3.x to PATH」をチェックして、PytyonフォルダをPATHに登録する必要があります。
一方、Pythonランチャーは、PATHに登録されていなくても、インストールされているPythonを探してくれます。従って、インストール時に「Add Python 3.x to PATH」にチェックしなくても構いません。
PATHに登録されている場合は、上の例のようにpython
とpy
で違うバージョンを指してしまうので、特にpip
を使う場合に注意が必要です。
pip install pypdf2 <= Pytyon 3.5にインストールされる py -m pip install pypdf2 <= Python 3.6にインストールされる
従って、混同しないようにするには、PATHを登録しない(登録している場合は「システム詳細設定」で削除する)方が得策です。
PythonフォルダがPATHに登録されていなければ、python
やpip
を入力するとエラーになるので、py
を使用することになります。
バージョンを切り替える方法
バージョンの切り替えが必要になるケースは以下の2つが考えられます。
- 新しいバージョンのPythonをインストールしたら、以前のプログラムが動かなくなった。
- Pythonのバージョンを指定して、
pip
でライブラリのインストールや確認をしたい。
そして、Pythonの実行バージョンを切り替えるには、以下の2つの方法があります。
- ファイルごとに切り替える
- コマンドごとに切り替える ▶
pip
を用いる場合はこちら
1. ファイルごとに実行バージョンを切り替える
例えば、「今までバージョン3.5
を使用していて、3.6
にグレードアップしたら、一部のPytyonプログラムが動かなくなった。動かなくなったプログラムだけは、3.5
のまま使用したい。」そのような場合は、プログラムファイルの先頭に以下の1行を付けてください。
#!python3.5
このPythonプログラムファイル(*.py)をダブルクリックすると、Pythonランチャーがこの先頭行を解釈して、3.5
で実行してくれます(3.5
はインストールされている必要があります)。
3.3
や3.4
で実行したい場合は、#!python3.3
や#!python3.4
を先頭に付ければよいのです。
この#!
で始まる行は、Shebang(シバンまたはシェバン)と呼ばれ、元はUnix系システムにおいて、実行するプログラムを指定するのに使われていますが、WindowsではPythonランチャーが擬似的に解釈してくれます。
Shebangについて、詳しくは以下の記事を参照してください。
2. コマンドごとに実行バージョンを切り替える
コマンドごとに切り替える場合は、以下のようにpy
の後にバージョンを指定します。ここで、sample.pyはカレントディレクトリ(C:¥Works¥py)にあるとします。
C:¥Works¥py> py -3.5 sample.py
先頭行のShebangでもバージョンが指定されている場合は、コマンドの方が優先されます。つまり、sample.pyの先頭に、#!python3.3
と入力されていても、上のコマンドでは3.5
で実行されます。
通常、コマンドで毎回バージョンを指定するのは面倒なので、Shebangでファイルごとに切り替えることが多いです。しかし、pip
を使う場合にはコマンドでの切り替えます。
例えば、3.5
と3.6
がインストールされている環境で、旧バージョンの3.5
の方にライブラリをインストールする場合は、以下のようにバージョンを明示する必要があります。
py -3.5 -m pip install pypdf2 py -m pip install pypdf2 <= 3.6の方にインストールされる
pipについて、詳しくは以下の記事を参照してください。