uvでグローバルなpythonを設定する
松井です。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
これにより、コンピュータ上のどの位置からでもpython
やipython
やuv 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
ではそのようなことはまだ出来ないのでは、と考えているのですが、もし簡単に出来るという情報があれば是非教えていただきたいです。