この記事は、表記の状況で困っている方に向けたものです。
ウェブで検索するといろいろな情報が出てきますが、私が試した方法はどれも上手くいかないか面倒だったりトラブルになりそうなリスクがありました。
今回は最も確実で安全かつ元に戻すのも楽な方法をご紹介します。
解決策の一つではありますが、これがベストなやり方とは限りませんので、ご了承ください。
できるだけ図を使い、初心者の方が分かりやすいように説明が多くなりました。
詳しい方にとっては、まどろっこしいかもしれません。
本題:説明
開発環境
私の環境は以下の通りです。
- OS:Windows10 / Windows11
- Python:3.8~3.11まで確認できました
この記事では Windows11 の画面キャプチャをしていますが、Windows10 でも同じことが再現できました。
macOS、Ubuntu などLinux系 の方は対応できずすみません。
状況
同じ PC に複数のバージョンの Python が入っているとき、デフォルトで実行されるバージョンを切り替えたい、という状況です。
通常、PC 内に複数バージョンの Python が存在する場合、実行されるのは最新バージョンとなります。
あえて古いバージョンが実行されるようにしたいという状況で、この記事が役に立つと思います。
なお、pip install でライブラリをインストールする Python のバージョンを指定する方法は、別の記事を用意しています。
さて、現在 PC に入っている Python のバージョンを確認するために、コマンドプロンプトで以下のコマンドを実行します。
py -0p
すると、
- システムに存在するすべての Python のバージョン
- その実行環境(python.exe)のパス
- デフォルトに設定されているバージョン
を確認することができます。
上の例では、3.7 と 3.9 が入っていることが確認できます。
このとき、バージョンの後ろに「*」が付いている方がデフォルトに設定されています。
なお、Python のスクリプトを実行したとき、どちらのバージョンが使われる(呼び出される)かを確認するため、以下の状況を用意しました。
このとき、
py -3.* -m pip list
というように py コマンドにバージョンを付けて pip list を実行すると、そのバージョンにインストールされているライブラリを確認することができます。
① 3.7 の環境
3.7 には、bottle フレームワークがインストールされています。
② 3.9 の環境
3.9 には、bottle フレームワークがインストールされていません。
サンプルスクリプトの用意
上記の違いを確認するため、bottle をインポートするスクリプトを用意します。
インポート以外の処理は入れていませんが、このスクリプトを実行したとき、その環境に bottle が入っていなければエラーが出ます。
import bottle
ファイル名は「test.py」としました。
3.9 でエラーが出ることを確認する
現在、3.9 がデフォルトの状態です。
用意したスクリプトをコマンドプロンプトで実行します。
すると、ModuleNotFound エラーで bottle がないと言われます。
3.9 には bottle が入っていないので、エラーが出て当然ですね。
3.7 ではエラーが出ないことを確認する
次に、3.7 をデフォルトに変更し、
同じくコマンドプロンプトで実行します。
(デフォルトの設定変更方法は後述。)
今度はエラーが出ずに実行することができました。
これで、デフォルトのバージョンを変更することができていると確認できました。
解決方法
他のサイトで紹介されていること
私が調べた限り、よく見かけるのは以下の内容でした。
- 「py.ini」ファイルを作成してdefaultを指定する
- シェバン行にバージョンを指定する
- 仮想環境(venv)で切り替える
ということですが、どれも一長一短。
もっとも簡単な方法として、システム環境変数の設定をすることですぐに解決できます。
この方法では、元に戻すのも簡単で、システムには影響がないので安心です。
具体的な手順を紹介します。
①システムのプロパティを表示する
*上記でも説明した通り、この記事は Windows をお使いの方に向けた説明です。
システム環境変数(PATH)の設定をするために「システムのプロパティ」を出します。
Windows10 の場合もほとんど同じです。
左下の検索ボックスに「システム環境変数」と入力すれば、一覧にメニューが表示されます。
②システムのプロパティ
下の図と同じ状況であればそのまま「環境変数」をクリックして③に進んでください。
画面が違うという場合、上部の「詳細設定」タブをクリックすると「環境変数」があります。
③環境変数
環境変数ウィンドウが表示されます。
下図の通り、「Path」という項目が2か所ありますが、
下の「システム環境変数」のPath だけを設定します。
上の「〇〇のユーザー環境変数」の Path は関係ありません。
「Path」をクリックし、新規をクリックします。
④新しいシステム変数の追加
「新しいシステム変数」のウィンドウが表示されます。
下図のように、変数名には「PY_PYTHON」と入れ、変数値にはデフォルトに設定したい Python のバージョンを入れます。
この例では、「3.7」とします。
できたらOKをクリックします。
元のウィンドウもすべてOKをクリックします。
⑤解決
現在開いているコマンドプロンプトはすべて閉じて、新しくコマンドプロンプトを開きます。
(複数開いている場合でも、全て閉じてください。)
デフォルトの設定を確認するため、以下を実行。
py -0p
Python3.7 がデフォルトに変更されています。
元に戻すには
最新のバージョンをデフォルトに戻す場合、先ほど設定した PATH の中から該当バージョンの「PY_PYTHON」を削除してください。
実行時にバージョンを指定する
ここまで紹介してきたのは、システム(Windows)に対してデフォルトの Python のバージョンを設定する方法でした。
しかし、そこまでしなくても「一時的に」バージョンを指定してスクリプトを実行したい時があります。
そんなときは、以下のようにコマンドを実行すればOKです。
py -3.9 test.py
これで、デフォルトの設定に関係なく強制的に 3.9 で実行することができます。
ライブラリのインストール先は変わらない?
今回紹介した方法は、あくまで「デフォルトの Python 実行環境=バージョンの変更」です。
実は、「pip installでライブラリをインストールする際のインストール先の Python のバージョンを変更する方法」は別にあります。
その説明について、別の記事を用意していますので、こちらを参考にしてください。
まとめ
今回はPython のバージョンが複数混在するとき、デフォルトのバージョンを切り替える方法について解説しました。
エラーはケースバイケースのことがあり、今回紹介した方法が誰にでも適用されるとは限りません。
上手くいかない、同じようにならないという場合、ぜひコメントで質問してください。
Python に限らず、プログラミングの学習をしていると問題はつきものです。
(仕事でもそうですが。)
コーディングのエラーは割と解決策がすぐに見つかりますが、開発環境やシステムに関するトラブルは本当に大変です。
今回ご紹介した件も初心者にはよくありそうな事例なので、この記事が参考になれば嬉しいです。
「参考になった」「ならなかった」「間違いがある」など、何かあればコメントなどでフィードバックをもらえると嬉しいです。
とても励みになります。
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。
それでは、ステキなPythonライフを!