環境構築 (2026年4月)

背景

 インストール大会〜プログラミング1,2では、conda + pip による環境構築をしていることが多かった。特に拘りが無ければこれで問題は無いが、ここ最近はセキュリティ面(*1)の問題から別手法を用いることが推奨されつつある。

今回の対応方針

 新規バージョンの公開直後にインストールしない「クールダウン期間(検疫期間とも呼ばれる)」を設定することができる uv を使う。この設定を導入すると、例えば新パッケージがPyPIにアップロードされても2日間は対象外とするといったことが可能になる。

 2026年4月3日時点では、少なくとも venv, pip, conda, pipenv等は直接的にはクールダウン機関を設定できないようなので、今回はuvを利用することとする。

環境構築

Step 1: uvのインストール

 homebrewをインストールしてあるなら以下の通り。Windowsやbrewを使いたくない人は公式ページ Installing uv を参照。

% brew install uv

Step 2: クールダウン期間の設定

 uvでは (1) インストール時のオプションとして設定する、(2) プロジェクト単位で設定する、(3) ユーザ単位で設定するぐらいの選択肢があり、今回は(3)で行う。

# もし ~/.config/uv/ が無ければ mkdir で作成。

# 上記ディレクトリがあるなら、vim/nano/vscodeで ~/.config/uv/uv.toml に以下を記載して保存する。

# 以下はクールダウン期間を1週間に設定する例。

exclude-newer = "1 week"

 設定を保存したら、念のため cat コマンドで確認すること。

Step 3: クールダウン期間の動作確認

 設定自体は終わっているが、念のため動作確認してみよう。今回は比較的リリース速度が速い fastapi をインストールしてみることにする。

# まずお試しフォルダ temp を作成し、移動する

% mkdir temp

% cd temp

# 環境を初期化する

% uv venv --clear

# パッケージがインストールされていないことを確認する

% uv pip list

(何も出力されなければOK)

# fastapiをインストールしてみる

% uv pip install fastapi

※通常のプロジェクトでは uv add を使うことを推奨。

ここでは動作確認のため uv pip を使用している。

# インストールされた fastapi のバージョンを確認する

% uv pip list | grep fastapi

(バージョンがクールダウン期間を除外した最新版になっているならOK)

# 動作に問題が無いなら仮想環境を初期化する

% uv venv --clear

# ついでに temp も削除

% cd ..

% rm -rf temp

Step 4: データマイニング班実験用の環境構築

 クールダウン期間が機能していることを確認できたら、本実験で利用する関連パッケージをインストールしよう。以下では ~/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       # ただのサンプル。削除編集可。

もしpythonバージョンを変更したい場合、pinを使おう。例えば以下のようにすると 3.12を指定することになる。pinは指定するだけであり、インタプリタを初めて利用する際(uv run, uv venv, uv sync等)に自動でインストールしてくれる。

% uv python pin 3.12

## (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 があることで、他の環境でも完全に同一の環境を再現できる。

Step 5: scikit-learnコード例による動作確認

  1. ソースファイルのダウンロード。
  1. Plot different SVM classifiers in the iris datasetの右上アイコンをクリックすると、.py と .ipynb (Jupyterlabのノートブック形式) が用意されている。今回は .py 形式のファイルをダウンロードし、作業ディレクトリに移動しよう。
  1. 実行その1(ターミナルでの実行)
  1. uv run python plot_iris_svc.py のように、通常実行する際の前に「uv run」を付けて実行する。グラフが描画されるならOK。
  1. 実行その2(VSCodeでの実行)
  1. info3dmフォルダをVSCodeで開く。
  2. 実行したいファイル(今回は plot_iris_svc.py)を開く。
  3. VSCodeウインドウ右下にPythonインタプリタが表示されている。今回利用したインタプリタは ~/info3dm/.venv/bin/python
  4. もし実行したいインタプリタになっていないならば、表示部分をクリックして、インタプリタを変更する。
  5. ファイル実行。グラフが描画されるならOK。

補足:完全に不要になったら .venv 削除するようにしよう

 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で、直接これをインストールしていなくとも関連パッケージとしてインストールされていることがあります。