A simple script to encapsulate venv and virtualenv creation in one. venv is always used if possible; if it's not, virtualenv will be used (if specified) as the fallback option.
This file can be used either as a standalone script, or a module to import.
create(python, env_dir, system, prompt, bare, virtualenv_py=None)
python
should be an absolute path pointing to a Python executable. If this is notNone
, and does not matchsys.executable
, that interpreter is launched as a subprocess to run this script. Otherwise, the creation is done in-process (subprocesses may still be run in steps during the creation).env_dir
points to the directory to create the new virtual environment.system
specifies whether system site packages will be available for the created virtual environment.prompt
specifies the prompt prefix used in the created virtual environment's activate scripts.bare
, if True, prevents any third-party libraries from being installed. This means you will not have Setuptools, pip, and Wheel available inside the created virtual environment.virtualenv_py
should be an absolute path pointing to avirtualenv.py
script. This is optional; if missing, virtualenv will not be used to create a virtual environment.
virtenv env_dir --python PYTHON [--bare] [--system-site-packages] [--prompt PROMPT]
Meanings of arguments are similar to the Python API.
The python
argument is required, and can be a version, such as 3.7
.
A suitable Python executable will be looked up automatically if possible.
As mentioned above, venv is always preferred if possible. virtualenv is used for the following scenarios:
- When the module
venv
is not available in the target Python. - When the module
ensurepip
is not available in the target Python. This generally happens for Python 3.3, or distributions such as Debian that don't like to bundleensurepip
. Without it, pip wouldn't be available, and we don't want that. - When
sys.real_prefix
is set. This usually means the target Python is managed by a virtualenv, and venv is known to have problems working in this situation. See discussion in bpo-30811 and pypa/virtualenv#1095 for more information.