wntrblm/nox

Error when running a uv backend session with active conda environment

jayqi opened this issue · 2 comments

Current Behavior

If you have a conda environment active and try to run a session with using uv as a backend and session.install, uv throws an error because it detects both an active conda environment and an active virtual environment:

nox > Command uv pip install ruff failed with exit code 2:
error: Both VIRTUAL_ENV and CONDA_PREFIX are set. Please unset one of them.

Expected Behavior

nox should clear both VIRTUAL_ENV and CONDA_PREFIX environment variables before trying to run a session.

(I am mixing conda environments and virtual environments for a project because my project needs graphviz, which is nice to install with conda. My dev environment is using conda. However, I don't need it for all environments like linting, so it would be nice to be able to use uv for fast sessions.)

Steps To Reproduce

# noxfile.py
import nox


@nox.session(venv_backend="uv")
def lint(session):
    session.install("ruff")
# No conda environment active, no problem
❯ nox -s lint
nox > Running session lint
nox > Creating virtual environment (uv) using python in .nox/lint
nox > uv pip install ruff
nox > Session lint was successful.

# Activate a conda environment, try to run
❯ mamba create -n my-conda-env -y
...redacted for brevity...
❯ mamba activate my-conda-env
❯ nox -s lint
nox > Running session lint
nox > Creating virtual environment (uv) using python in .nox/lint
nox > uv pip install ruff
nox > Command uv pip install ruff failed with exit code 2:
error: Both VIRTUAL_ENV and CONDA_PREFIX are set. Please unset one of them.
nox > Session lint failed.

Environment

- OS: macOS
- Python: 3.12.1
- Nox: 2024.3.2

Anything else?

No response

It looks like manually unsetting the CONDA_PREFIX environment variable is a workaround, e.g.,

@nox.session(venv_backend="uv")
def lint(session):
    session.env.pop("CONDA_PREFIX")
    session.install("ruff")

I just saw astral-sh/uv#2574 was released with uv v0.1.23.

This fixes the specific problem I was having. However, I think the opposite case would still be an issue (active venv, nox session uses conda env and user tries to use uv) and would install things into the wrong environment.