背景
uv 使いだして疑問になったこと
- 仮想環境指定してないのに、何で動くん?そもそも、どこの環境使ってるん?
ってこと、requirements.txt で簡単に pip install 出来るのは便利なんだけど、uv が効いてる環境ですぐに使えちゃうことで、想定していない python 環境使ってたりすることがあったので、ちょっと調べた記録
結論
以下、かな?
If we discover a workspace, we use the current behavior.
If we can't discover a workspace, we use our standard Python interpreter discovery, and run in that interpreter. (So, e.g., run in the current venv, or a discovered venv, or whatever you pass in --python.)
We add an option to mark a pyproject.toml as "not managed by uv" / "not part of a workspace" (like managed = false or workspace = false) so that you can use this in codebases that have a pyproject.toml but want to use the pip API.
ざっくりでいくと
-
現在の環境を使う < 環境設定かな?
-
無い場合、標準のPythonインタープリタ検出を使用し、実行する。
ex.) 現在の venv、検出された仮想環境、or--python
の指定環境 -
toml や workspace を利かせないようなオプションもあるよ。
⇒そういう環境下で、使いたい場合用?
実際に使っている環境を調べるには?
こんな感じで調べて、インタラプターを設定すればOK
uv run display_environment.py
import sys
# Pythonの検索パスを表示
print("\nPython module search paths:")
for path in sys.path:
print(path)
print("Python executable:", sys.executable)
print("Python version:", sys.version)
print("Python prefix:", sys.prefix)
たぶん、こっちでやっても同じ筈
uv python find
よくある困りごと
error: No virtual environment found; run uv venv
to create an environment, or pass --system
to install into a non-virtual environment
仮想環境がないと、uv pip install
が出来ないってだけなので
uv venv
で仮想環境作ればOK
あとは、compile/install してやる
uv pip compile .\requirements.in --output-file requirements.txt
uv pip install -r requirements.txt
vs code で、import が反応しない
環境がずれてるので、uv で使ってる環境に合わせれば ok
warning: VIRTUAL_ENV=venv3125
does not match the project environment path .venv
and will be ignored
環境不一致ってことなので、以下のようにして一致させれば解決はする
$env:UV_PROJECT_ENVIRONMENT = "{to path}\venv3125”
あとがき
徐々に理解が深まっていくと楽しいですな