hotch-potch, Note to self

いろいろ作業記録

Python on Windows, Note to self

1.はじめに

Windows上でのPython開発における、細々としたことの覚え書きです。

2.開発環境構築

(1)Pythonインストール

(書き中)

最新のインストーラをダウンロードする。Welcome to Python.org
インストールオプション
インストールオプション
インストール中 ・・・
インストール完了

ターミナルを開いて実行

PS C:\Users\hoge\Desktop> py
Python 3.13.2 (tags/v3.13.2:4f8bb39, Feb  4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ^Z
PS C:\Users\hoge\Desktop>

[Ctrl]-[Z]で終了します。

最後に、MicrosoftStoreアプリを開かないように、 設定を下記のとおり変更します。

「設定」→「アプリ」→「アプリの詳細設定」→「アプリ実行エイリアス

アプリインストーラー 「python」「python3」の両方をOFFにする

Pythonが見つからない場合に、ストアアプリのインストールに進まず、下記のエラーが出るようになります。

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

(2)複数のPythonバージョンを切り替え

参考:https://python-beginner.blog/multiversion/

ターミナルを開く。 ここでは、フォルダC:\Applications\python以下に、 既にVer.3.10とVer.3.13がインストールされているものとする。

#現在のバージョンを確認
C:\Users\hoge>py -0p
 -V:3.13 *        C:\Applications\python\Python313\python.exe
 -V:3.10          C:\Applications\Python\Python310\python.exe

複数バージョンのPythonがインストールされていても、 環境変数を定義し、特定のバージョンを指定することができます。

設定→システム→バージョン情報→システムの詳細設定を開く
システムのプロパティ→環境変数を開く
環境変数PY_PYTHONを定義して、バージョン番号を記入

先ほどの環境変数を適用のため、ターミナルを閉じて、改めて開く。(VSCodeの場合は、VSCodeを開きなおす必要があります)

C:\Users\hoge>py -0p
 -V:3.13          C:\Applications\python\Python313\python.exe
 -V:3.10 *        C:\Applications\Python\Python310\python.exe

(3)仮想環境の準備

#作業ディレクトリを準備
C:\Users\hoge>md myproject
C:\Users\hoge>cd myproject

#構築
C:\Users\hoge\myproject>py -m venv venv 

最後の「venv」は任意の名前で構いません。 この表記の例が多いですので、差しさわりなければこのままで。

(4)作り直した仮想環境に、パッケージを復元

参考:https://note.nkmk.me/python-pip-install-requirements/

requirements.txtを使って、パッケージ情報を容易に移し替えられます。

#作り直す前の仮想環境の、パッケージ情報を書き出す
C:\Users\hoge\myproject>py -m pip freeze > requirements.txt
#構築
C:\Users\hoge\myproject>py -m venv venv 
#作り直したあとの仮想環境に、パッケージ情報を読み込ませる
C:\Users\hoge\myproject>py -m pip install -r requirements.txt

(5)pipのライブラリのアップデート

参考:https://zenn.dev/haretokidoki/articles/8836fecf6b4cfc

VSCoderequirements.txtを開くと、pipパッケージの更新状況が分かります

Client Challengeをインストールする

C:\Users\hoge\myproject>py -m pip install pip-review  
# 更新可能なものを、一括アップデートする
C:\Users\hoge\myproject>pip-review --auto

#パッケージ情報を書き出す
C:\Users\hoge\myproject>py -m pip freeze > requirements.txt

(6)Pythonのアップデート

最新のインストーラをダウンロードする。 Welcome to Python.org
インストーラを起動して、「Upgrade Now」をクリックすると、既にインストール済のバージョンをアップデートしてくれます。
ここでの例は、Ver.3.13系列なので、C:\Applications\python\Python313の内容がアップデートされます。

(7)poetryの活用

Windowsでpoetryを使いたいときの手順

インストール

Windows版のPython3が、既にインストールされている状態とする。

> py --version
Python 3.13.2

ターミナルから下記のコマンドを実行する。

> (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

Retrieving Poetry metadata

# Welcome to Poetry!

This will download and install the latest version of Poetry,
a dependency and package manager for Python.

It will add the `poetry` command to Poetry's bin directory, located at:

C:\Users\xxx\AppData\Roaming\Python\Scripts\bin

You can uninstall at any time by executing this script with the --uninstall option,
and these changes will be reverted.

Installing Poetry (2.1.1)
Installing Poetry (2.1.1): Creating environment
Installing Poetry (2.1.1): Installing Poetry
Installing Poetry (2.1.1): Creating script
Installing Poetry (2.1.1): Done

Poetry (2.1.1) is installed now. Great!
・・・

インストールしたpoetryコマンドを実行できるように、 Windowsの設定・システムのうち、 環境変数・ユーザー環境変数PATHに、下記の記述を追加する。

%APPDATA%\Python\Scripts

ターミナルからpoetryコマンドを実行すると、Usageが表示されます。

新規にプロジェクトを作ります。

--srcオプションを付けることで、SRCレイアウトでプロジェクトが作られます。

> poetry new --src MyProj

# 内容を確認
> cd MyProj
> ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2025/02/20     11:01                src
d-----        2025/02/20     11:01                tests
------        2025/02/20     11:01              0 README.md
------        2025/02/20     11:01            338 pyproject.toml

# virtualenv のフォルダをプロジェクトのディレクトリの中に作る
# (指定無しの時は AppData\Local\Pythonの下にプロジェクト毎に作られます)
> poetry config --local virtualenvs.in-project true

> poetry install
> poetry add <pkg name>
# この操作のあとにvirtualenv のフォルダが作られる

VSCodePythonの場所を教えます

[Ctrl]-[Shift]-[P]

Usage

(8)uvの活用

Windowsでuvを使いたいときの手順

インストール

Windows版のPython3が、既にインストールされている状態とする。

> py --version
Python 3.13.2

ターミナルから下記のコマンドを実行する。

> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Downloading uv 0.6.2 (x86_64-pc-windows-msvc)
Installing to C:\Users\hoge\.local\bin
  uv.exe
  uvx.exe
everything's installed!

To add C:\Users\hoge\.local\bin to your PATH, either restart your shell or run:

    set Path=C:\Users\hoge\.local\bin;%Path%   (cmd)
    $env:Path = "C:\Users\hoge\.local\bin;$env:Path"   (powershell)

もし下記の様なエラーが出た場合

iex : 用語 'iex' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。  名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください  。 

このときは、iexコマンドのところを、Invoke-Expressionコマンドに置き換えます。

> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | Invoke-Expression"

インストールの際に、 Windowsの設定・システム・環境変数・ユーザー環境変数PATHにもuvの実行パス(%USERPROFILE%\.local\bin)が追加されている。

インストール後、ターミナルを開き直して環境変数PATHの変更を反映し、バージョン確認

PS > uv --version
uv 0.6.2 (6d3614eec 2025-02-19)

Usage

プロジェクトを作成

# カレントフォルダの一つ下に、プロジェクトのフォルダも一緒に作る場合
> uv init my-project

# プロジェクトフォルダに、srcディレクトリも作った状態で作成するとき
> uv init my-project --lib

> cd my-project

# すでに空っぽの作っていて、そこにプロジェクトを作る場合
> uv init --app 

# プロジェクトの内容確認
> ls

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2025/02/23      0:42            109 .gitignore
-a----        2025/02/23      0:42              5 .python-version
-a----        2025/02/23      0:42             84 main.py
-a----        2025/02/23      0:42            152 pyproject.toml
-a----        2025/02/23      0:42              0 README.md

# パッケージ追加
> uv add pytest ruff mypy

# 実行
> uv run main.py
Hello from my-project!

# my-project\__main__.py をモジュール実行
> uv run -m my-project
Hello from my-project MODULE!

# パッケージのアップデート
> uv lock --upgrade
Resolved 62 packages in 766ms

# 仮想環境を削除
> Remove-Item -Recurse -Force .venv

# 仮想環境を作り直す
> uv sync

# uvのキャッシュを削除
> uv cache clean
Clearing cache at: C:\Users\hoge\AppData\Local\uv\cache
Removed 24936 files (1.3GiB)

VSCodeインタプリタの場所を教える。

(9)その他テクニック

3.開発手法

(1)traceback出力の文字をカラーにする

(2)ソースのヘッダーの書き方

(9)その他テクニック

4.streamlit

(1)uvを使う

# プロジェクトの準備
> uv init trystreamlit
> cd trystreamlit

# パッケージの追加
# 最後のオプションは、streamlitやhttpxインストール時にハードリンクを作ろうととしてエラーで止まるのを抑制するため
> uv add streamlit httpx pytest ruff --link-mode=copy

# 実行
> uv run streamlit run ./main.py 

# ブラウザを開かずに実行
> uv run streamlit run ./main.py --server.headless true

(2)poetryを使う

# プロジェクトの準備
> poetry new myproject
> cd myproject

# パッケージの追加
> poetry add streamlit pytest

# 実行
> poetry run streamlit run baconsole/__main__.py

# ブラウザを開かずに実行
> poetry run streamlit run baconsole/__main__.py --server.headless true

(3)VSCodeのデバッガー連携

参考:https://ploomber.io/blog/streamlit-debugging/

.vscode\launch.jsonに下記の設定を追記する。

  • ポイント・下記の記入を忘れないこと
    • "module": "streamlit",
    • "justMyCode": false,
{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python デバッガー: 現在のファイル",
            ・・・(省略)・・・
        },
        {
            "name": "streamlit デバッガー: 現在のファイル",
            "type": "debugpy",
            "request": "launch",
            "module": "streamlit",
            "console": "integratedTerminal",
            "justMyCode": false,
            "args": [
                "run",
                "${file}",
            ]
        }
    ]
}

実行とデバッグのメニューに、「streamlit デバッガー」が追加されていますので、こちらを実行します。

(3)VSCodeデバッグ実行でブラウザを開かせないようにする

参考:Supress new browser window once app is started execution - Using Streamlit - Streamlit

コンフィグファイルに指定

.streamlit\config.toml

[server]
headless = true

実行時引数に指定

.vscode\launch.json--server.headlessを追記する。

{
            ・・・(省略)・・・
        },
        {
            "name": "streamlit デバッガー: 現在のファイル",
            "type": "debugpy",
            "request": "launch",
            "module": "streamlit",
            "console": "integratedTerminal",
            "justMyCode": false,
            "args": [
                "run",
                "${file}",
                "--server.headless",
                "true"
            ]
        }
    ]
}

(9)コーディングテクニック

5.fastapi

(1)uvを使う

# プロジェクトの準備
> uv init tryfastapi 
> cd tryfastapi 

# パッケージの追加
> uv add fastapi uvicorn pytest 

(2)vscodeからuvicornを起動

.vscode\launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python デバッガー: 現在のファイル",
            "type": "debugpy",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        },
        {
            "name": "RUN uvicorn",
            "type": "debugpy",
            "request": "launch",
            "module": "uvicorn",
            "args": ["main:app", "--reload"],
            "console": "integratedTerminal"
        }
    ]
}

(9)コーディングテクニック