4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

uv 利用時に仮想環境を作成しない

Last updated at Posted at 2025-03-11

uv を使用するとプロジェクトフォルダに仮想環境として .venv ディレクトリが作成されるのがデフォルトの動作となっているが、Docker コンテナ内で uv を使用している場合はすでにコンテナによって隔離された環境が作られているにも関わらず、さらに venv によって仮想環境を作られてしまうことになる。これは二重で環境を隔離することになっていてなんだか気持ち悪いし、PATH を通したりするのも面倒くさいのでできればやめたい。

Poetry のときは poetry config virtualenvs.create false によって仮想環境を作らない選択ができたが、uv の場合はバージョン 0.4.4 で追加された環境変数 UV_PROJECT_ENVIRONMENT を設定することで同じことが実現できるようだ。

以下の Dockerfile では、環境変数 UV_PROJECT_ENVIRONMENT にシステム Python がインストールされているパス /usr/local を指定することで仮想環境を作成せずにシステム Python 環境に直接パッケージをインストールするようにしている。

Dockerfile
FROM python:3.13

ENV UV_PROJECT_ENVIRONMENT /usr/local

RUN pip install uv

どうやらこの機能自体が Docker や CI といった既に隔離されている環境で使用することを想定して作られたらしい。

この PR にも書いてあるが、uv sync はプロジェクト依存関係に存在しないパッケージを削除する挙動をするので、適切に隔離できていない (≒ 他の Python プロジェクトから参照されるような) Python 環境でこの設定を使うと環境が壊れてしまうことになりかねないので注意されたい。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?