packaging.python.org
packaging.python.org copied to clipboard
Create a discussion document about virtual environments
Before you can start installing or using packages in your virtual environment you’ll need to activate it.
While a virtual environment is activated, pip will install packages into that specific environment.
Activating a virtual environment will put the virtual environment-specific
pythonandpipexecutables into your shell'sPATH.
Could these parts be updated as well? They are incorrect and actively misleading, leading to a lot of misunderstandings. A virtual environment can be used without activation. It depends on how / which pip is used. It would be fantastic if this guide could explain that in slightly more detail: Explicitly explain that activating is only (one way of) putting the the virtual environment-specific python and pip executables into the current shell's PATH. Specifying that path explicitly is also possible and often easier, preferred, clearer, more robust. The leaky abstraction "activation" and the lack of such an explanation is mystifying things unnecessarily, and leads to many problems and much confusion.
- "Activation sucks as a method of switching environments" -- pfmoore
- "I use venvs extensively, but I never “activate” them." -- fungi
- "Why do we need to activate envs? One can always just env/bin/pip install whatever" -- bernatgabor
- "I have never once activated a virtual environment. I always use /full/path/to/venv/bin/python -m pip install …. And that’s what I teach to groups I mentor." -- ericvsmith
- ...
Originally posted by @petsuter in https://github.com/pypa/packaging.python.org/issues/1338#issuecomment-1793544750
We might need to consider that some things might rely on the presence of the VIRTUAL_ENV environment variable, which is set when activating a virtual environment.
Apparently the Windows py launcher is aware of VIRTUAL_ENV (already since Python 3.5, (PEP 486 ). Nice. 👍
The The Python Launcher for Unix is also aware of VIRUAL_ENV https://python-launcher.app/#activated-virtual-environment
but also notes "In general, this feature is not needed. If you create a virtual environment in the current directory in a .venv directory, the Python Launcher will automatically use that. ... Otherwise it will search the parent directory, and so on, until it finds a .venv directory"
I think .venv directories are not automatically used by the Windows py launcher yet.