LOST IN BLUE

2025/02/12

uv管理下のpythonをpyenvみたいにglobal pythonとして使う

pyenvのpyenv global 3.13のように、uv管理下のpythonをglobal pythonとして使う方法を備忘録として残しておきます。
2025-02-13現在の情報です。preview機能なので、詳しくは以下のissueも参考にしておいてください。

今のところ不都合はありませんが、めちゃくちゃ使い込んでいる訳では無いです。
自己責任でお試しください。

globalに使えるpythonをインストール

uv python install [設定したいバージョン (e.g. 3.13)] --default --previewでインストールしたpythonをglobalに使えるようにしてくれてます。

$ uv python install [設定したいバージョン (e.g. 3.13)] --default --preview
$ uv python list
# インストールしたpythonを確認
# .local/bin/python にlinkを張ってるやつがあるはず
$ which python
# ちゃんとuv管理下のpythonになっているか確認
# たぶん .local/bin/python なはず

PATHを設定

uv python install [3.XX] --default --previewではpython本体のPATHしか設定してくれません。
pipやそれで入れたxonshのようなツールも使いたいので、応急処置的にPATHを設定してあげます。
お好みのprofileやrcファイルでPATHを設定してあげてください。

# 現在のuv python install [3.XX] --default --previewで指定されたpythonがあるbinをPATHに追加
export PATH="$(readlink $HOME/.local/bin/python | xargs dirname):$PATH"

だいぶ無理やりなので、uvが用意してくれた~/.local/bin/python3も上書きしてしまってます。
もっと良さげな方法がありそうですが、とりあえず動くのでヨシ!(現場猫)

externally-managed-environmentで怒られるのでpip.confを設定

上の方法で使えるようにしたpipだと、externally-managed-environmentと怒られるので、~/.pip/pip.confに覚悟を書いておきます。

[global]
break-system-packages = true

これもなんか副作用が怖いですが、uv使っているなら各プロジェクトではvenv作るでしょうということでヨシ!