環境構築 (2026年4月)
インストール大会〜プログラミング1,2では、conda + pip による環境構築をしていることが多かった。特に拘りが無ければこれで問題は無いが、ここ最近はセキュリティ面(*1)の問題から別手法を用いることが推奨されつつある。
新規バージョンの公開直後にインストールしない「クールダウン期間(検疫期間とも呼ばれる)」を設定することができる uv を使う。この設定を導入すると、例えば新パッケージがPyPIにアップロードされても2日間は対象外とするといったことが可能になる。
2026年4月3日時点では、少なくとも venv, pip, conda, pipenv等は直接的にはクールダウン機関を設定できないようなので、今回はuvを利用することとする。
homebrewをインストールしてあるなら以下の通り。Windowsやbrewを使いたくない人は公式ページ Installing uv を参照。
% brew install uv |
uvでは (1) インストール時のオプションとして設定する、(2) プロジェクト単位で設定する、(3) ユーザ単位で設定するぐらいの選択肢があり、今回は(3)で行う。
# もし ~/.config/uv/ が無ければ mkdir で作成。 # 上記ディレクトリがあるなら、vim/nano/vscodeで ~/.config/uv/uv.toml に以下を記載して保存する。 # 以下はクールダウン期間を1週間に設定する例。 exclude-newer = "1 week" |
設定を保存したら、念のため cat コマンドで確認すること。
設定自体は終わっているが、念のため動作確認してみよう。今回は比較的リリース速度が速い fastapi をインストールしてみることにする。
# まずお試しフォルダ temp を作成し、移動する % mkdir temp % cd temp # 環境を初期化する % uv venv --clear # パッケージがインストールされていないことを確認する % uv pip list (何も出力されなければOK) # fastapiをインストールしてみる % uv pip install fastapi
# インストールされた fastapi のバージョンを確認する % uv pip list | grep fastapi (バージョンがクールダウン期間を除外した最新版になっているならOK) # 動作に問題が無いなら仮想環境を初期化する % uv venv --clear # ついでに temp も削除 % cd .. % rm -rf temp |
クールダウン期間が機能していることを確認できたら、本実験で利用する関連パッケージをインストールしよう。以下では ~/info3dm として作成することにする。
## (a) info3dmフォルダを作成し、移動する % mkdir info3dm % cd info3dm ## (b) uv環境初期化する。initするとあれこれ作成されるが、 ## この時点ではまだPythonインタプリタは確定していない。 % uv init Initialized project `info3dm` % ls -a1 ./ ../ .git/ .gitignore # git管理から除外設定するためのファイル。.venv等が含まれる。 .python-version # 利用するPythonバージョン。恐らく標準で実行されるやつが自動で設定される。 main.py # ただのサンプル。削除編集可。 pyproject.toml # プロジェクト設定ファイル。 README.md # ただのサンプル。削除編集可。
## (c)pythonインタプリタを用意する(uv run時に .venv が作成され、そこに用意される) ## uv run は必要に応じて仮想環境(.venv)を自動作成する。 ## そのため、このコマンド実行時に .venv が生成される。 % uv run which python Using CPython 3.12.12 interpreter at: /opt/anaconda3/bin/python3 Creating virtual environment at: .venv /Users/tnal/info3dm/.venv/bin/python *ここで表示されている /opt/anaconda3/bin/python3 は仮想環境(.venv)を作成する際に利用された「元のPython」であり、conda環境のパッケージはこのプロジェクトでは使用されない。 % uv pip list (ユーザが追加したパッケージが無ければOK) ## (d) 必要なパッケージをインストール ## !!condaやpipを使わないように注意!! ## ※ pip や conda を直接使用すると、依存関係が uv.lock に反映されず、 ## 環境の再現性が失われるため使用しないこと。 % uv add scikit-learn matplotlib pandas jupyter plotly *conda, pipと比べると並列でインストールされるので早く終わるはず。 *uv add すると、自動で pyproject.toml, uv.lock が更新される。 ## おまけ:同じ環境を再現 ## ケース1: pyproject.tomlだけを使ってざっくり再現 (pyproject.tomlをコピーした作業フォルダを用意して、syncを実行) % uv sync ## ケース2: pyproject.toml + uv.lockを使って完全再現 (pyproject.toml, uv.lockをコピーした作業フォルダを用意して、syncを実行) % uv sync *uv.lock があることで、他の環境でも完全に同一の環境を再現できる。 |
uvはプロジェクトディレクトリ内の .venv フォルダにパッケージをインストールしていく。このためストレージがかなり食われる点に注意。
# 標準ファイルのサイズは普通通り % du -sh * 4.0K main.py 4.0K plot_iris_svc.py 4.0K pyproject.toml 0B README.md 340K uv.lock # .venvは512MBも使っている % du -sh .* 80K .git 4.0K .gitignore 4.0K .python-version 512M .venv |
*1: 2026年3月24日〜数日に掛けて「Pythonインタプリタを起動しただけでSSH鍵等が盗まれる可能性のあるパッケージ」が広まりました。有名どころではLiteLLMで、直接これをインストールしていなくとも関連パッケージとしてインストールされていることがあります。