108
109

Windows で複数バージョンの Python を使う

Last updated at Posted at 2019-01-29

※ Windows 10 のバージョン 1903 から、 Python がデフォルトで入っています。
※ そのため、 C:\Users\{ユーザー名}\AppData\Local\Microsoft\WindowsApps\python.exe がデフォルトで Path に登録されていて厄介なので注意してください。
※ Python をインストールするフォルダを決めていればどのバージョンが入っているか把握できますが、分からなくなった時のためにコマンドを追記しました。
※ Python をよく使うようになってきたので、 venv を追加しました。

Python のバージョン管理と言ったら、 pyenv が主流っぽい気がします。
あんまり詳しく知りませんが・・・
でも、 pyenv って Python2.7 とかで使えるイメージがあります。
そして、 Windows の場合は普通に 公式ページ から 64bit 版の Python の最新版を落としてインストールすると、当然 Python3.7 (執筆時点)とかが入って、 Python2.7 も落としてきてインストールしても、 Path を通せるのはどちらかになりますよね。

ちなみに Windows 10 で環境変数をいじるためには、Windowsキー + i を押して設定を開き、検索窓に「システムの詳細」って入れれば「システムの詳細設定の表示」が出ますので、Windows 7 の時のように環境変数の Path に Python の実行ファイルのあるフォルダと Lib フォルダやら Scripts フォルダやらを追加すればコマンドプロンプトで python と打てば実行できるようになりますよね。

しかし、環境変数に書いてしまうと当然バージョンの切り替えは環境変数に依存してしまいます。
そこで、今回ご紹介する方法を使います。
(これもググっていて見つけたものなので、ご存知の方も多いかもしれませんね)

まずは普通に Python をインストールする

Windows に、普通にインストールします。
Path の設定とかはしません。
標準的なインストールでも構いませんが、実行ファイルの場所を把握するためにインストールするフォルダは指定することをお勧めします。

別のバージョンの Python もインストールする

例えば最初に Python3.7 をインストールしたとしましょう。
その次に、例えば Python2.7 をインストールしましょう。
ここで、 Python3.7.1 を入れた後に Python3.7.2 を入れたら Python3.7.1 は上書きされるので、最低限マイナーバージョンは異なるものをインストールする必要があります。
なので、 Python3.7 と Python3.6 をインストール、でも構いません。
必要なバージョンの Python をインストールします。

コマンドプロンプトで実行

Path を通していないので、コマンドプロンプト上で python -V と入れても、何も反応しないと思います。
以下のようなイメージです。

コマンドプロンプト
C:\Users\hoge>python -V
'python' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

今までは Path を通すことによって、このコマンドを使えるようにしていました。
それが、以下のコマンドを使うと解決することが分かりました。

コマンドプロンプト
C:\Users\hoge>py -V
Python 3.7.2

py というコマンドが使えます。
バージョンを指定して実行する場合、以下のようにします。

コマンドプロンプト
C:\Users\hoge>py -2.7 -V
Python 2.7.15

C:\Users\hoge>py -3.7 -V
Python 3.7.2

指定しない場合、インストールされている最新のバージョンで動作するようです。
また、 pip を使うときは、以下のようにします。

コマンドプロンプト
C:\Users\hoge>py -2.7 -m pip freeze
autopep8==1.4.3
configparser==3.7.1
future==0.17.1
futures==3.2.0
jedi==0.13.2
mccabe==0.6.1
parso==0.3.2
pluggy==0.8.1
pycodestyle==2.5.0
pydocstyle==3.0.0
pyflakes==2.1.0
python-jsonrpc-server==0.1.2
python-language-server==0.22.0
rope==0.11.0
six==1.12.0
snowballstemmer==1.2.1
yapf==0.25.0

python コマンドでモジュールを指定するときと同じ感じですね。
pip install も、同じようにバージョン指定でそれぞれ入れることができます。
インストールされる先は、きちんとそれぞれの Python のフォルダの中になるため、 Atom などのエディタで Python の補完機能を使う場合は使いたいバージョンの python.exe を指定するだけです。
指定しなければいけないのはちょっと残念ですが。。。

インストール済みのバージョンが分からなくなったら

自分はCドライブ直下にPythonというフォルダを作成してそこにいつもインストールしていたのですが、Dドライブにもフォルダを作ってそこにもインストールしていたことに、つい最近気づきました。
そして64bit版だとバージョン指定が若干異なるようなので、じゃあバージョン指定ってどうすればいいの、という時に以下のコマンドを実行しましょう。

コマンドプロンプト
d:\>py --list
Installed Pythons found by py Launcher for Windows
 -3.9-64 *
 -3.7-64

py --list と入力すれば、選択可能なバージョンが一目で分かりますね。

venv

お手軽に Python でプログラムを書いていると、ライブラリは Windows 上の Python に直接インストールするやり方をやめたくなってきました。
なので、 venv を使うことにしました。
そんなに難しい使い方はしておらず、サクッと構築していきます。

例えばプロジェクトフォルダが以下だとします。

D:\program_src\python\myapp

コマンドプロンプトで以下のようにします。
(ドライブの移動があるので、/d オプションを付けています)

コマンドプロンプト
cd /d D:\program_src\python\myapp
py -m venv .venv

このコマンドにより、 D:\program_src\python\myapp 配下に .venv フォルダが作成されます。
あとは venv をアクティベートしてあげればOK。(コマンドは続きから)

コマンドプロンプト
.venv\Scripts\activate

すると、コマンドプロンプトがこんな感じになるかと思います。

コマンドプロンプト
(.venv) D:\program_src\python\myapp>

こうなったらそのまま pip が使えます!

コマンドプロンプト
(.venv) D:\program_src\python\myapp>pip install requests

抜けるときは、 deactivate します。

コマンドプロンプト
(.venv) D:\program_src\python\myapp>deactivate

これのいいところは、 VSCode でこの .venv フォルダを認識してくれるので Windows 上の Python に直接ライブラリをインストールしなくても flake8 のコード解析が使えるところですね。
プロジェクトごとに色々と pip install している場合に便利です!

ちなみにフォルダの名称を .venv にしなくても、 VSCode では認識してくれました。
なので、以下でも問題なかったです。

コマンドプロンプト
py -m venv hoge
hoge\Scripts\activate

余談

当然ながら、 py コマンドが使える以上、どこかに py.exe があるはずです。
それを where で探してみると、以下になりました。

C:\Users\hoge>where py
C:\Windows\py.exe

特に何のひねりもなく、普通の場所にありますね。
Python をインストールした際に、インストール先のフォルダとは関係なく C:\Windows\py.exe は配置される、ということでしょうかね。
インストール時に何か書いてあるのかもしれませんが・・・

ということで、 Windows 好きがなるべく Windows を使いたいがための記事でした。

108
109
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
108
109