mieki256's diary



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用に書いたスクリプトが無ければいいけど…どうだったかな…。まあ、そのうち何か不具合に遭遇したら、その時対応しよう…。

py.exeの動作がおかしい。 :

Windows + Python 2.x 環境に Python 3 をインストールすると、py.exe というランチャープログラムが C:\Windows\ 以下にインストールされて、
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 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
と書いてしまっていた。おそらく…。
  1. シバン行の指定を py.exe が読み取って、「py -3」として動かそうとする。
  2. Visual Studio側の Python を呼び出してしまう。
  3. そちらには PySimpleGUI なんて入ってないからエラーを出す。
そういう状況だろうなと。

シバン行を以下に変更。
#!python
これで、「py 03_sample_pysimplegui.py」で動くようになった。

まあ、素直に、「python 03_sample_pysimplegui.py」と打っておけばいいのかもしれない。

以上です。

過去ログ表示

Prev - 2020/03 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project