松井です。pythonのパッケージ&プロジェクト管理システムであるuvで、グローバルなpythonを設定する方法の忘備録を書いておきます。

概要

uvはモダンなパッケージ&プロジェクト管理システムですが、普通に使う分には、グローバルなpythonに影響を与えません。これは、プロジェクトごとに環境を作るほうが当然良いからです。しかし、グローバルpythonが使えないというのは何かと不便です。何も考えずにipythonを開いてnumpyの計算を検算したい、とかいったことはよくあります。

そこで、この記事ではuvでグローバルなpythonを設定する方法を忘備録として残しておきます。やり方は単純で、グローバル用の仮想環境を作っておき、ターミナル起動時に毎回activateするというだけです。このやり方は行儀がよくないかもしれないので、使う際は自己責任でお願いします。

手順1:インストール

uvをインストールします

手順2:グローバルな仮想環境を$HOME/.venvに作る

$ cd $HOME
$ uv venv

これにより仮想環境のディレクトリが$HOME/.venvとして作られます

手順3:ターミナル起動時にactivateする

この仮想環境を常にactivateするようにします。$HOME/.bashrcに以下を追記します。

# Activate the global uv virtual environment
if [[ -d "$HOME/.venv" ]]; then
    source "$HOME/.venv/bin/activate"
else
    echo "No virtual environment found in .venv or ~/.venv"
fi

上記が終わったら、一度ターミナルを閉じて再起動してください。

この記載は以下を参考にさせていただきました。

手順4:動作確認

上記で設定した仮想環境のpythonが適切に使えることを確認してください。以下のようになるはずです。

$ which python
/home/your_name/.venv/bin/python

さて、ここではpipが入っていません。今後もpipの直打ちはもう使いません。

$ which pip
(インストールされていないと言われる)

手順5:パッケージのインストール

今後は、pipを使ってパッケージをインストールしたいときは、uv pipとします。例えばまずipythonが欲しいので、以下のようにします。

$ uv pip install ipython
(爆速でインストールされる)

こうするとipythonが仮想環境に入ってくれます。確認しましょう。

$ which ipython
/home/your_name/.venv/bin/ipython

$ ipython
(ipythonが使える)

一般的なパッケージも上記の方式でインストールできます

$ uv pip install nanopq
(爆速でインストールされる)
$ python -c "import nanopq; print(nanopq.__version__)"
0.2.1

今後は、pip関連のパッケージ管理は以下のように行います。

インストール:
$ uv pip install hoge

削除:
$ uv pip uninstall hoge

アップデート:
$ uv pip install -U hoge

requirements.txtからインストール:
$ uv pip install -r requirements.txt

これにより、コンピュータ上のどの位置からでもpythonipythonuv pipとすれば、仮想環境である$HOME/.venvの中のものをグローバルに使うことが出来ます。

手順6:プロジェクトごとに別に仮想環境を作る場合

各プロジェクトでしっかり仮想環境を作りたい場合、普通に仮想環境を作って入ればOKです

手順7:環境の大掃除

上記のようにグローバルなpythonを作って好き勝手パッケージをいれていくと、どんどん環境が汚くなります。年末に$HOME/.venvを削除し、手順2からやり直すことで気持ちよく新年を迎えます。

所感

噂通りライブラリのインストールが早すぎるので、確かにこれは流行りそうという気になります。

背景

自分はもともとAnacondaをよく使っていました。Anacondaは実は上記のように.bashrcにてAnacondaのデフォルト環境を常にアクティベートすることになっており、それによりグローバルpython環境も準備されていました。ですがAnacondaはライセンスの問題からもう使わないほうがよいので、代替手段としてuvを使うことを考えました。Anacondaの気持ちよさは「Anacondaは環境を乗っ取るが、それを受け入れれば楽」「おかしいことになったらAnacondaのファイルを全消しすれば最初に戻る」という点でした。uvでも、$HOME/.venvを作ってそれを消せば最初に戻りますので、そのような意味では似たような使い方が出来るかもしれません。

Anacondaは仮想環境をディレクトリ(プロジェクト)に依存せずに作ることができ、それが良い面でも悪い面でもあると思います(例えばCVPR2025に投稿するための実験を考えた際、複数リポジトリにまたがる処理について全て単一の仮想環境で行いたい場合、conda create -n cvpr2025のようにしてディレクトリに依存せず仮想環境を作れる)。現状のuvではそのようなことはまだ出来ないのでは、と考えているのですが、もし簡単に出来るという情報があれば是非教えていただきたいです。