pypa / packaging.python.org

Python Packaging User Guide
http://packaging.python.org
1.39k stars 811 forks source link

Create a discussion document about virtual environments #1344

Open willingc opened 8 months ago

willingc commented 8 months ago

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 python and pip executables into your shell's PATH.

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.

Originally posted by @petsuter in https://github.com/pypa/packaging.python.org/issues/1338#issuecomment-1793544750

sinoroc commented 8 months ago

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.

petsuter commented 8 months ago

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.