nix/uv2nix/uv2nix\343\202\222\344\275\277\343\201\243\343\201\237Nix + uv\343\201\247\343\201\256Python\347\222\260\345\242\203\346\247\213\347\257\211.md
... ...
@@ -3,42 +3,19 @@
3 3
nixを使ってみようかなーと思っていたところ、nixとuvを結合するuv2nixというツールがあるのを知り、NotebookLMでまとめてみました。
4 4
この文章はNotebookLMによって生成されました。初めて使ってるので、間違っているところがあるかも。
5 5
6
-## ライセンスについて
7
-
8
-[1]のライセンスがCC BY 4.0であることに基づき、この文章もCC BY 4.0でライセンスされています。
9
-
10
-- 参照:
11
- - [1] [NixCon 2025 - Python packaging with nixpkgs, pyproject.nix & uv2nix - YouTube](https://youtu.be/5yvDZnwmQSs?si=4rax_UKfTueq36Cl)
12
- - ライセンス: CC BY 4.0
13
- - [2] [Getting started - uv2nix](https://pyproject-nix.github.io/uv2nix/usage/getting-started.html)
6
+## 参照
7
+- [NixCon 2025 - Python packaging with nixpkgs, pyproject.nix & uv2nix - YouTube](https://youtu.be/5yvDZnwmQSs?si=4rax_UKfTueq36Cl)
8
+- [Getting started - uv2nix](https://pyproject-nix.github.io/uv2nix/usage/getting-started.html)
14 9
15 10
---
16 11
17
-# NixとPythonパッケージ管理:uv2nixとflake.nixの役割
18
-
19
-## 1. なぜ `flake.nix` (Nixpkgs) だけで管理しないのか
20
-従来のNixpkgsを使用したPython開発(`flake.nix`のみでの管理)には、主に以下の技術的・実用的な課題が存在します。
21
-
22
-* **二重管理と非効率性**: Python標準の `pyproject.toml` があるにもかかわらず、その内容(依存関係)を `flake.nix` 内の `withPackages` 引数として手動で翻訳・記述する必要があり、非効率(unergonomic)です,。
23
-* **開発ツールの非互換性**: Nixpkgsは標準的な仮想環境(virtual environment / venv)を作成しません。その結果、標準的なvenvの存在を前提とするLSP(例: Pyright)やエディタの補完機能が正常に動作しない場合があります。
24
-* **バージョンの制約**: Nixpkgsに収録されているPythonパッケージセットのバージョン(例: Jinja2 3.1.5)が強制されるため、プロジェクトが要求する特定のバージョン(例: 3.1.6)と不整合が生じることがあります,。
25
-* **環境変数による汚染(Footguns)**: NixpkgsのPython環境は `PYTHONPATH` を使用して依存関係を伝播させます。これにより、開発環境に入った際、Nixpkgs側の依存関係が優先されてしまい、意図しないライブラリが読み込まれる問題が発生します,。
26
-
27
-## 2. uv2nix とは
28
-`uv2nix` は、Rust製の高速なPythonパッケージマネージャ `uv` のワークスペースを取り込み、純粋なNixコード(Pure Nix code)を使用して動的にNixのDerivation(ビルド定義)を生成するツールです。
29
-
30
-* **PyPIからの直接構築**: NixpkgsのPythonパッケージセットに依存せず、`uv.lock` ファイルに基づいてPyPIから直接ソースやバイナリ(Wheel)を取得し、環境を構築します。
31
-* **標準的な仮想環境の提供**: Nix独自の環境構造ではなく、標準的な仮想環境(bog-standard virtual environment)を作成するため、LSPなどの既存のPython開発ツールがそのまま動作します。
32
-* **ワークスペースとEditableインストール**: 複数のパッケージを含むワークスペースや、開発中のローカルパッケージのEditableインストール(編集可能モード)に対応しており、スクリプトなどがパスに通った状態で開発できます,。
33
-* **基盤技術**: `pyproject.nix` ライブラリとそのビルドインフラストラクチャをベースに構築されています。
34
-
35
----
36
-
37
-# チュートリアル:uv2nix による Python 開発環境の構築
12
+# uv2nix による Python 開発環境の構築
38 13
39 14
このガイドでは、Rust製の高速なパッケージマネージャ `uv` と Nix を組み合わせ、再現性が高く、かつ既存の開発ツール(LSP等)と互換性のある開発環境を構築します。
40 15
41
-このページの末尾に、当チュートリアルとは違う手順で構築したものですが、完成形を掲載しています。良ければ参考にしてください。
16
+[uv2nixの`hello-world`テンプレート](https://github.com/pyproject-nix/uv2nix/tree/master/templates/hello-world)に`pandas`を追加したサンプルをGithubで公開しました。よければ参考にしてください。
17
+[takanotume24/uv2nix-add-package-sample: uv2nixを用いてPythonパッケージを追加する場合のサンプル](https://github.com/takanotume24/uv2nix-add-package-sample)
18
+
42 19
43 20
## 1. 準備とプロジェクトの初期化
44 21
... ...
@@ -56,16 +33,7 @@ uv init --app --package
56 33
uv lock
57 34
```
58 35
59
-## 2. `flake.nix` の設定(環境の定義)
60
-
61
-`uv2nix` の核心は、`uv.lock` を読み込んで Nix のパッケージセットに変換することです。以下の概念を組み合わせて `flake.nix` を記述します。
62
-
63
-1. **ワークスペースのロード**: プロジェクト全体(`uv.lock`)を解析します。
64
-2. **オーバーレイの作成**: `mkPyprojectOverlay` を使い、`uv.lock` の情報を Nix のビルド指示書(Derivation)に変換します。ここでは「Wheel(バイナリ)」または「sdist(ソース)」の優先度を指定できます。
65
-3. **Pythonセットの構築**: 基本となる Python に、ビルドシステム(setuptools等)と上記のオーバーレイを結合します。
66
-4. **Editable モード(開発用)**: 開発中はソースコードの変更を即座に反映させるため、`mkEditablePyprojectOverlay` を使用して、ソースを仮想環境にリンクさせます。
67
-
68
-### 手順 2-1: `flake.nix` の作成
36
+## 手順 2-1: `flake.nix` の作成
69 37
70 38
以下のファイルを`flake.nix`として保存します。
71 39
[uv2nix/templates/hello-world/flake.nix at master · pyproject-nix/uv2nix](https://github.com/pyproject-nix/uv2nix/blob/master/templates/hello-world/flake.nix)
... ...
@@ -117,8 +85,5 @@ nix develop
117 85
118 86
を追加する。
119 87
120
----
121
-この構成により、`flake.nix` の管理コストを最小限に抑えつつ、Python エコシステムの利便性と Nix の再現性を両立させた開発が可能になります。
122 88
123
-[uv2nixの`hello-world`テンプレート](https://github.com/pyproject-nix/uv2nix/tree/master/templates/hello-world)に`pandas`を追加したサンプルをGithubで公開しました。
124
-[takanotume24/uv2nix-add-package-sample: uv2nixを用いてPythonパッケージを追加する場合のサンプル](https://github.com/takanotume24/uv2nix-add-package-sample)
89
+