Windows で Python 開発環境構築
Windows で Python の開発環境を構築する手順を述べる。
なお、WSL2は用いない。
また、Anacondaは用いない。
Pythonインストール
Windows用のPythonは、pythonの公式サイト(https://www.python.org/)からインストールできます。
Microsoft Storeからもインストールできますが、あえてそっちからインストールする必要はないです。
古いバージョンもインストールできます。
https://www.python.org/downloads/windows/
インストール時に注意すべきなのは「Add Python to PATH」というチェックボックスにチェックを入れないことです。
デフォルトで入ってないんだから入れなきゃいいんですがなんか入れてしまいがちですので入れないでください。
理由は py ランチャーとバージョンが一致しないからです。
pythonのインストール時にPATHを設定しないで!
なぜPythonをインストールするときにPATHを設定しないほうが良いのでしょう。
それはLinuxとかにはない、Windows特有の理由があります。
WindowsのPythonはインストールするとpythonだけじゃなく、pyというランチャーがインストールされます。
このpyというランチャーがイコールpythonだと思ってください。
同じものならなんで分けてるの?と思うかもしれないですが、通常pythonはバージョンの切り替えが面倒です。
pyランチャーが無い場合、PATHを切り替えたりpyenvを使ったりして切り替える必要が生じます。
正直、ちょっとめんどいです。
それを、pyランチャーは解決してくれます。
pyそのままだとデフォルトの(一般的にはPCの中にある最新のPythonを)使います。
py --version
Python 3.10.4
py -3.8 --version
Python 3.8.10
といった感じです。むろん、そのバージョンのpythonをまだインストールしてなければエラーになります。
py -3.7 --version
Python 3.7 not found!
Installed Pythons found by C:\Windows\py.exe Launcher for Windows
-3.10-64 *
-3.9-64
-3.8-64
Requested Python version (3.7) not installed, use -0 for available pythons
現在入っているPythonの一覧は以下のコマンドで確認できます。
> py --list-paths
Installed Pythons found by C:\Windows\py.exe Launcher for Windows
-3.10-64 C:\Users\ユーザ名\AppData\Local\Programs\Python\Python310\python.exe *
-3.9-64 C:\Users\ユーザ名\AppData\Local\Programs\Python\Python39\python.exe
-3.8-64 C:\Users\ユーザ名\AppData\Local\Programs\Python\Python38\python.exe
で、なのですが、なぜ環境変数で指定するな、と以下と言いますと、環境変数で設定したpythonとpyのバージョンが一致しないからです。
(たまたま一致する場合も当然ありますが)
例えばPATHのほうでPython3.9を設定しておくと、pythonというコマンドのバージョンは当然3.9です。
でもpyのほうは基本的には最新をとるのでpyのバージョンは3.10となります。
ここでpython -m pip 云々とやった場合、当然3.9のほうに入りますが、py -m pip 云々だと3.10に入ります。
なんかよくわからん、という感じに陥りがちです。
あぁ、環境変数にPATH入れてたせいか、とかあとから気づいて面倒です。
要は、PATHなんか通さなきゃよかっただけの話なんですね。
ので、環境変数を設定するのはやめましょう(というかインストール時のデフォルトは設定なしですのであえて入れる必要がないのに入れるべきじゃないです)
仮想環境を作ろう
py ランチャーでスイッチできるといっても、pythonなのに py ってコマンドもなんかなじめないし、いちいち -3.8 とかつけるのもうっとおしい。
しかもpipとかでインストールするとその環境が汚染される(他のプロジェクトで使う場合時とか困る)
ので、仮想環境を作りましょう。Linuxとかで言うところの pyenv + venvです。
pyenvは必要なく、これはpyが代用できます。
PowerShellで以下のコマンドを実行すれば簡単に任意のバージョンの仮想環境が作成できます。
(コマンドプロンプトを使うのはやめましょう。PowerShellはすべてにおいてコマンドプロンプトの上位互換です)
また、PowerShellは管理者モードで立ち上げましょう。
まずは現在のPythonのバージョンを確認しましょう。
> python
Python
Python、としか出てきませんね。PATHが設定されてないからどのバージョンかわからない、という状況です。
(変な感じですけどね、コマンドが見つからないエラーにしてくれたほうがうれしいのですが)
んで、venvコマンドを打ちましょう。ここでは3.9.x系にしたいので、-3.9とします。(mkdirのpy39envの名称は任意)
本来であれば .venv は任意なのですが、ここは.venvに統一します。ここを.venvにしとくと後述する Visual Studio Code で.venvを読んでくれるからです。
> mkdir py39env
> cd py39env
> py -3.9 -m venv .venv
> .\.venv\Scripts\Activate.ps1
(.venv) > python --version
Python 3.9.13
ここで気を付けないといけないのはActivate.ps1であって、activate.batではないです。
PowerShellじゃなくコマンドプロンプトでやるのであればactivate.batなのですが、上述の通り、今さらコマンドプロンプトは使うべきじゃないです。
んで、終了するときは
deactivate
これも、
> .\Scripts\deactivate.bat
PowerShellの場合、deactivateを任意の場所でたたけばよいです。
簡単ですね!
pipとかも当然ですがactivate中の仮想環境内のPythonにのみインストールされるので、他の環境を汚染しません。
pipはデフォルトだとちょっと古いのでまずアップグレードしておきましょう。
pip install --upgrade pip
???なんかエラーになった。
> pip install --upgrade pip
Requirement already satisfied: pip in c:\users\(ユーザー名)\documents\development\python\django-development\.venv\lib\site-packages (22.0.4)
Collecting pip
Using cached pip-22.1.2-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 22.0.4
Uninstalling pip-22.0.4:
Successfully uninstalled pip-22.0.4
ERROR: Could not install packages due to an OSError: [WinError 5] アクセスが拒否されました。: 'C:\\Users\\(ユーザー名)\\AppData\\Local\\Temp\\pip-uninstall-jp3jxn81\\pip.exe'
Check the permissions.
なんで?と思いもう一回実行したら、
> pip install --upgrade pip
Requirement already satisfied: pip in c:\users\ryuse\documents\development\python\django-development\.venv\lib\site-packages (22.1.2)
PowerShellは管理者モードで立ち上げてるし、なんだろう?まぁいいや。
このシステムではスクリプトの実行が無効になっているため...
管理者モードでPowerShellを立ち上げているのに、「このシステムではスクリプトの実行が無効になっているため・・・」というエラーが出た場合
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
というコマンドを1回実行する(一度実行すれば良い)
VS Code で開発しよう
VS Codeで開発するのは簡単で、上記のActivateが終わった状態で、.venvがあるディレクトリ上で、
> code .
.venvも読んでくれるので、例えば、hello.pyというファイルを新規作成して、
msg = "Hello World"
print(msg)
& C:/Users/(ユーザー名)/Documents/py39env/.venv/Scripts/python.exe c:/Users/(ユーザー名)/Documents/py39env/hello.py
簡単!でも、.venvという名称じゃないと自動認識はしてくれないみたいだから気を付けよう!
ReadMe.txtをつけよう
簡単に仮想環境が作れるのでホイホイ作ってしまうとこの仮想環境、一体何目的のやつだったっけ?とわかんなくなることがあります。
ので、仮想環境を作ったらそのディレクトリ内にReadMe.txtを作って、どういう目的の仮想環境だったのかをメモしておきましょう。
そうしないと一か月後とかわけわかんなくなったりします。
以上!