このページについて

nixを使ってみようかなーと思っていたところ、nixとuvを結合するuv2nixというツールがあるのを知り、NotebookLMでまとめてみました。
この文章はNotebookLMによって生成されました。初めて使ってるので、間違っているところがあるかも。

参照


uv2nix による Python 開発環境の構築

このガイドでは、Rust製の高速なパッケージマネージャ uv と Nix を組み合わせ、再現性が高く、かつ既存の開発ツール(LSP等)と互換性のある開発環境を構築します。

uv2nixのhello-worldテンプレートpandasを追加したサンプルをGithubで公開しました。よければ参考にしてください。 takanotume24/uv2nix-add-package-sample: uv2nixを用いてPythonパッケージを追加する場合のサンプル

1. 準備とプロジェクトの初期化

まだ uv がインストールされていない場合、Nix を使って一時的なシェルに入り、プロジェクトの雛形を作成します。

コマンド:

# 1. uv と python が使えるシェルに入る
$ nix-shell -p python3 uv

# 2. プロジェクトの初期化(pyproject.toml, .python-version 等が作成される)
$ uv init --app --package

# 3. ロックファイルの生成
$ uv lock

2: flake.nix の作成

以下のファイルをflake.nixとして保存します。 uv2nix/templates/hello-world/flake.nix at master · pyproject-nix/uv2nix

3. パッケージの追加と反映(日常のフロー)

uv2nix を導入後のパッケージ管理は、Python 標準のワークフローに従います。flake.nix を編集する必要はありません。

手順 3-1: 依存関係の定義

pyproject.toml を編集し、追加したいライブラリを記述します。

[project]
dependencies = [
    "requests",
    "numpy",
]

手順 3-2: ロックファイルの更新

ターミナルで以下を実行し、uv.lock を更新します。

$ uv lock

手順 3-3: 環境の再構築

開発シェルに入り直します。uv2nix が自動的に新しい uv.lock を読み込み、環境を構築します。

$ nix develop

VS Codeでのimportエラーを修正する方法

このままだとプロジェクトルートに.venvディレクトリが存在しないため、VS Code上でpandasパッケージへのimportエラーが発生する。

uv2nix-add-package-sample/flake.nix at 5518b2f18754f52a4f3a512005d49d9b35e1ab93 · takanotume24/uv2nix-add-package-sampleのように、

          shellHook = ''
            unset PYTHONPATH
            export REPO_ROOT=$(git rev-parse --show-toplevel)
            ln -sfn ${virtualenv} .venv
          '';

を追加する。