2020/03/02(月) [n年前の日記]
#1 [python] デフォルトで使うPythonのバージョンを3.7にした
今まで、手元のWindows10 (1909 x64)機では、デフォルトで Python 2.7 (2.7.17, 32bit) を使うように環境変数 PATH で指定していたのだけど。Python 2.7 はサポート終了していることだし、さすがにそろそろ Python 3 へと移行せねば、という気分になってきて。
てなわけで、Python 3.7.6 32bit版をインストールして、PATH ではそちらを指定するようにしてみたり。
しかし、大丈夫かな…。何か日常的に使ってる、Python 2.7用に書いたスクリプトが無ければいいけど…どうだったかな…。まあ、そのうち何か不具合に遭遇したら、その時対応しよう…。
てなわけで、Python 3.7.6 32bit版をインストールして、PATH ではそちらを指定するようにしてみたり。
しかし、大丈夫かな…。何か日常的に使ってる、Python 2.7用に書いたスクリプトが無ければいいけど…どうだったかな…。まあ、そのうち何か不具合に遭遇したら、その時対応しよう…。
◎ py.exeの動作がおかしい。 :
Windows + Python 2.x 環境に Python 3 をインストールすると、py.exe というランチャープログラムが C:\Windows\ 以下にインストールされて、
手元の環境で試してみたら、妙な結果に…。
しかし、「py」「py -3」を指定した時の結果がおかしい。Python 3.7.6 32bit版をインストールしてあるはずなのに、Python 3.7.5 64bit版が入ってると py.exe が言ってくる。その 3.7.5 64bit って一体どこにインストールされているんだ…。
py --help を眺めたら、利用可能な Pythonの一覧を表示してくれる機能があると知った。「--list」「--list-paths」を指定すればいいらしい。(「-0」「-0p」を指定してもよい。)
つまり、自分の環境で、Python 3.7.6 32bit版を使いたい場合…。
一々指定するのは面倒だな…。どこかで事前に指定できないのか…。
環境変数 PY_PYTHON を指定することで、py.exe がデフォルトで使う Python のバージョンを指定できるらしい。ユーザー側の環境変数として指定してみる。
python hoge.pyと打ち込む代わりに、
py hoge.py py -2 hoge.py py -3 hoge.pyと打てるようになって、Pythonのバージョンを切り替えて使えるようになるのだけれど。
手元の環境で試してみたら、妙な結果に…。
> py --version Python 3.7.5 > py -3 --version Python 3.7.5 > py -2 --version Python 2.7.17 > py -VV Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 00:11:34) [MSC v.1916 64 bit (AMD64)] > py -3 -VV Python 3.7.5 (tags/v3.7.5:5c02a39a0b, Oct 15 2019, 00:11:34) [MSC v.1916 64 bit (AMD64)] > py -2 -VV Python 2.7.17「py -2」を指定した場合は問題無し。Python 2.7.17 32bit版をインストールしてあるから。
しかし、「py」「py -3」を指定した時の結果がおかしい。Python 3.7.6 32bit版をインストールしてあるはずなのに、Python 3.7.5 64bit版が入ってると py.exe が言ってくる。その 3.7.5 64bit って一体どこにインストールされているんだ…。
py --help を眺めたら、利用可能な Pythonの一覧を表示してくれる機能があると知った。「--list」「--list-paths」を指定すればいいらしい。(「-0」「-0p」を指定してもよい。)
> py --list Installed Pythons found by py Launcher for Windows -3.7-64 * -3.7-32 -2.7-32 -2.7-32 -2.6-32 -2.5-32 -2.4-32 > py --list-paths Installed Pythons found by py Launcher for Windows -3.7-64 "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe" * -3.7-32 C:\Python\Python37-32\python.exe -2.7-32 C:\Python\Python27\python.exe -2.7-32 D:\Dev\Panda3D-1.9.4\python\python.exe -2.6-32 C:\Python\Python26\python.exe -2.5-32 C:\Python\Python25\python.exe -2.4-32 C:\Python\Python24\python.exe謎が解けた。「py -3」を指定すると、Visual Studio関係でインストールされてる Python 3.7.5 64bit版が選ばれてしまうのだな…。
つまり、自分の環境で、Python 3.7.6 32bit版を使いたい場合…。
> py -3.7-32 -VV Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 18 2019, 23:46:00) [MSC v.1916 32 bit (Intel)]「py -3.7-32」を指定しないといかんらしい。
一々指定するのは面倒だな…。どこかで事前に指定できないのか…。
環境変数 PY_PYTHON を指定することで、py.exe がデフォルトで使う Python のバージョンを指定できるらしい。ユーザー側の環境変数として指定してみる。
> set | grep PY_PYTHON PY_PYTHON=3.7-32
> py -VV Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 18 2019, 23:46:00) [MSC v.1916 32 bit (Intel)] > py -0p Installed Pythons found by py Launcher for Windows -3.7-64 "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe" -3.7-32 C:\Python\Python37-32\python.exe * -2.7-32 C:\Python\Python27\python.exe -2.7-32 D:\Dev\Panda3D-1.9.4\python\python.exe -2.6-32 C:\Python\Python26\python.exe -2.5-32 C:\Python\Python25\python.exe -2.4-32 C:\Python\Python24\python.exeこれで、デフォルトで Python 3.7.6 32bit版が使われるようになった。
◎ 外部ライブラリを呼び出せない。 :
PySimpleGUI のサンプルスクリプトを動かそうとしたら…。
「py -3.7-32 03_sample_pysimplegui.py」と指定したところ動いてくれた。
調べたところ、03_sample_pysimplegui.py の _シバン行 に、
シバン行を以下に変更。
まあ、素直に、「python 03_sample_pysimplegui.py」と打っておけばいいのかもしれない。
> py 03_sample_pysimplegui.py I am Python 3 Traceback (most recent call last): File "03_sample_pysimplegui.py", line 32, in <module> import PySimpleGUI as sg ModuleNotFoundError: No module named 'PySimpleGUI'pipでインストールしたモジュールが読み込まれない。
「py -3.7-32 03_sample_pysimplegui.py」と指定したところ動いてくれた。
調べたところ、03_sample_pysimplegui.py の _シバン行 に、
#!python3と書いてしまっていた。おそらく…。
- シバン行の指定を py.exe が読み取って、「py -3」として動かそうとする。
- Visual Studio側の Python を呼び出してしまう。
- そちらには PySimpleGUI なんて入ってないからエラーを出す。
シバン行を以下に変更。
#!pythonこれで、「py 03_sample_pysimplegui.py」で動くようになった。
まあ、素直に、「python 03_sample_pysimplegui.py」と打っておけばいいのかもしれない。
[ ツッコむ ]
以上です。