Как выйти из виртуального окружения python windows

I’m using virtualenv and the virtualenvwrapper. I can switch between virtualenv’s just fine using the workon command.

me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$ 

How do I exit all virtual environments and work on my system environment again? Right now, the only way I have of getting back to me@mymachine:~$ is to exit the shell and start a new one. That’s kind of annoying. Is there a command to work on «nothing», and if so, what is it? If such a command does not exist, how would I go about creating it?

Timur Shtatland's user avatar

asked Jun 13, 2009 at 14:15

Apreche's user avatar

3

Usually, activating a virtualenv gives you a shell function named:

$ deactivate

which puts things back to normal.

I have just looked specifically again at the code for virtualenvwrapper, and, yes, it too supports deactivate as the way to escape from all virtualenvs.

If you are trying to leave an Anaconda environment, the command depends upon your version of conda. Recent versions (like 4.6) install a conda function directly in your shell, in which case you run:

conda deactivate

Older conda versions instead implement deactivation using a stand-alone script:

source deactivate

answered Jun 13, 2009 at 14:31

Brandon Rhodes's user avatar

Brandon RhodesBrandon Rhodes

84k16 gold badges106 silver badges147 bronze badges

8

Use:

$ deactivate 

If this doesn’t work, try

$ source deactivate

Anyone who knows how Bash source works will think that’s odd, but some wrappers/workflows around virtualenv implement it as a complement/counterpart to source activate. Your mileage may vary.

Peter Mortensen's user avatar

answered Apr 12, 2015 at 6:41

DarkRider's user avatar

DarkRiderDarkRider

1,4551 gold badge9 silver badges4 bronze badges

8

I defined an alias, workoff, as the opposite of workon:

alias workoff='deactivate'

It is easy to remember:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$

Peter Mortensen's user avatar

answered Jan 14, 2015 at 16:23

Bob Stein's user avatar

Bob SteinBob Stein

16.3k10 gold badges89 silver badges101 bronze badges

4

To activate a Python virtual environment:

$cd ~/python-venv/
$./bin/activate

To deactivate:

$deactivate

Peter Mortensen's user avatar

answered Nov 26, 2015 at 7:06

Amitesh Ranjan's user avatar

Amitesh RanjanAmitesh Ranjan

1,1821 gold badge12 silver badges9 bronze badges

3

Running deactivate [name of your environment] is able to exit/deactivate from your python environment.

Example with python3.6 Windows 10 in PowerShell:

PS C:\Users\kyrlon\Desktop> py -m venv env1
PS C:\Users\kyrlon\Desktop> .\env1\Scripts\activate
(env1) PS C:\Users\kyrlon\Desktop> deactivate env1
PS C:\Users\kyrlon\Desktop> py -m venv env1

Example with python3.9 on Linux Ubuntu 20.04 LTS Desktop:

kyrlon@pc1:~$ python3 -m venv venv1
kyrlon@pc1:~$ source venv1/bin/activate
(venv1) kyrlon@pc1:~$ deactivate venv1
kyrlon@pc1:~$

answered Jul 22, 2021 at 18:21

kyrlon's user avatar

kyrlonkyrlon

1,1022 gold badges8 silver badges16 bronze badges

1

I found that when within a Miniconda3 environment I had to run:

conda deactivate

Neither deactivate nor source deactivate worked for me.

answered Apr 23, 2019 at 18:49

CephBirk's user avatar

CephBirkCephBirk

6,4325 gold badges56 silver badges74 bronze badges

1

You can use virtualenvwrapper in order to ease the way you work with virtualenv.

Installing virtualenvwrapper:

pip install virtualenvwrapper

If you are using a standard shell, open your ~/.bashrc or ~/.zshrc if you use Oh My Zsh. Add these two lines:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

To activate an existing virtualenv, use command workon:

$ workon myenv
(myenv)$

In order to deactivate your virtualenv:

(myenv)$ deactivate

Here is my tutorial, step by step on how to install virtualenv and virtualenvwrapper.

Peter Mortensen's user avatar

answered Sep 1, 2016 at 5:13

levi's user avatar

levilevi

22.1k7 gold badges73 silver badges74 bronze badges

4

For my particular case, I go to to the working directory

CD /myworkingdirectory

Then I activate my env like this:

my-env/scripts/activate

From this same working folder (/myworkingdirectory) to deactivate, I tried this but it does nothing:

my-env/scripts/deactivate

This does work:

deactivate

answered Mar 18, 2021 at 22:11

Nick.Mc's user avatar

Nick.McNick.Mc

18.3k6 gold badges62 silver badges91 bronze badges

In MacOs ventura —

to activate —

 sudo chmod -R 755  ./venv/bin
 source venv/bin/activate    

to deactivate —

deactivate

answered Jun 23 at 0:29

user51's user avatar

user51user51

8,92722 gold badges79 silver badges162 bronze badges

Using the deactivate feature provided by the venv’s activate script requires you to trust the deactivation function to be properly coded to cleanly reset all environment variables back to how they were before— taking into account not only the original activation, but also any switches, configuration, or other work you may have done in the meantime.

It’s probably fine, but it does introduce a new, non-zero risk of leaving your environment modified afterwards.

However, it’s not technically possible for a process to directly alter the environment variables of its parent, so we can use a separate sub-shell to be absolutely sure our venvs don’t leave any residual changes behind:


To activate:

$ bash --init-file PythonVenv/bin/activate

  • This starts a new shell around the venv. Your original bash shell remains unmodified.

To deactivate:

$ exit OR [CTRL]+[D]

  • This exits the entire shell the venv is in, and drops you back to the original shell from before the activation script made any changes to the environment.

Example:

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

[user@computer ~]$ bash --init-file PythonVenv/bin/activate

(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV
/home/user/PythonVenv

(PythonVenv) [user@computer ~]$ exit
exit

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

answered Feb 18, 2020 at 22:48

Will Chen's user avatar

Will ChenWill Chen

4824 silver badges12 bronze badges

$ conda deactivate
or
$ source deactivate

would work.

If it doesn’t work, try deactivate [name of your environment] instead.

answered Jul 12, 2022 at 7:22

Léo's user avatar

LéoLéo

811 silver badge11 bronze badges

1

Since the deactivate function created by sourcing ~/bin/activate cannot be discovered by the usual means of looking for such a command in ~/bin, you may wish to create one that just executes the function deactivate.

The problem is that a script named deactivate containing a single command deactivate will cause an endless loop if accidentally executed while not in the venv. A common mistake.

This can be avoided by only executing deactivate if the function exists (i.e. has been created by sourcing activate).

#!/bin/bash

declare -Ff deactivate  && deactivate

answered Aug 3, 2019 at 21:33

DocSalvager's user avatar

DocSalvagerDocSalvager

2,1561 gold badge21 silver badges28 bronze badges

I use zsh-autoenv which is based off autoenv.

zsh-autoenv automatically
sources (known/whitelisted) .autoenv.zsh files, typically used in
project root directories. It handles «enter» and leave» events,
nesting, and stashing of variables (overwriting and restoring).

Here is an example:

; cd dtree 
Switching to virtual environment: Development tree utiles
;dtree(feature/task24|✓); cat .autoenv.zsh       
# Autoenv.
echo -n "Switching to virtual environment: "
printf "\e[38;5;93m%s\e[0m\n" "Development tree utiles"
workon dtree
# eof
dtree(feature/task24|✓); cat .autoenv_leave.zsh 
deactivate

So when I leave the dtree directory, the virtual environment is automatically exited.

"Development tree utiles" is just a name… No hidden mean linking to the Illuminati in here.

answered Feb 14, 2017 at 10:50

Sardathrion - against SE abuse's user avatar

0

I my case, I was able to activate virtual environment using env-name\scripts\activate and deactivate it using deactivate. However, after running update on my windows PC deactivate was no longer recognized as an internal or external command. What I used from that moment onward is env-name\scripts\deactivate and that solved the problem.

answered Dec 30, 2021 at 11:42

C-Bizz's user avatar

C-BizzC-Bizz

6149 silver badges26 bronze badges

I had the same problem while working on an installer script. I took a look at what the bin/activate_this.py did and reversed it.

Example:

#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys

# Path to virtualenv
venv_path = os.path.join('/home', 'sixdays', '.virtualenvs', 'test32')

# Save old values
old_os_path = os.environ['PATH']
old_sys_path = list(sys.path)
old_sys_prefix = sys.prefix


def deactivate():
    # Change back by setting values to starting values
    os.environ['PATH'] = old_os_path
    sys.prefix = old_sys_prefix
    sys.path[:0] = old_sys_path


# Activate the virtualenvironment
activate_this = os.path.join(venv_path, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))


# Print list of pip packages for virtualenv for example purpose
import pip
print str(pip.get_installed_distributions())

# Unload pip module
del pip

# Deactivate/switch back to initial interpreter
deactivate()

# Print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())

I am not 100% sure if it works as intended. I may have missed something completely.

Peter Mortensen's user avatar

answered Dec 11, 2014 at 18:18

Lord Sumner's user avatar

Lord SumnerLord Sumner

5735 silver badges6 bronze badges

1

If you don’t know how to exit some python environment I would just run

bash --norc

as there is a risk you missed deleting that code for entering to some python environment, which something such as conda/mamba already installed into your .bashrc The conda/mamba enters environments the same way you can run bash inside bash. Default installation forces base environment to be activated by default, which drives me crazy as it might break lot of things, to exit it you just type

mamba deactivate

But you can configure conda in a way that you activate it only when you use it. Then if you e.g. type

mamba activate env
(env)mamba activate base
(base)mamba activate base
(base)mamba activate xy

You will actually be in nested environment (xy) and (xy) -deactivate-> (base) -deactivate-> (base) -deactivate-> (env) -deactivate-> no conda/mamba.

So if you are in some environment, do not know how much nested it is and you want to get base environment, you can also use

mamba activate base

answered May 10 at 11:08

VojtaK's user avatar

VojtaKVojtaK

5134 silver badges13 bronze badges

Часто разработчики используют виртуальные среды (virtualenvs) в Python для изоляции проектов и управления зависимостями. Однако, может возникнуть потребность

Часто разработчики используют виртуальные среды (virtualenvs) в Python для изоляции проектов и управления зависимостями. Однако, может возникнуть потребность вернуться к системной среде Python, выйдя из виртуальной среды.

Предположим, что была активирована виртуальная среда с именем myenv. Это обычно делается с помощью команды source myenv/bin/activate (для Unix или MacOS) или myenv\Scripts\activate (для Windows). После активации виртуальной среды в командной строке отображается имя этой среды, например, (myenv) $.

Теперь допустим, что необходимо вернуться к системной среде Python. Возможно, нужно установить пакет глобально или просто переключиться на другую виртуальную среду. В любом случае, необходим способ выйти из текущей виртуальной среды.

Решение этой проблемы довольно простое. Для выхода из виртуальной среды достаточно использовать команду deactivate. После выполнения этой команды произойдет деактивация виртуальной среды, и командная строка вернется к обычному виду, например, $.

Таким образом, для выхода из виртуальной среды в Python нужно просто выполнить команду deactivate. Эта команда не требует аргументов и может быть выполнена в любой момент после активации виртуальной среды. Если текущая сессия командной строки была закрыта, виртуальная среда будет деактивирована автоматически.

A Virtual Environment in Python helps you to manage different versions of Python for different projects without doing a mess with your default system dependencies. It allows you to manage separate environments for different packages for different projects. This is one of the most important tools that most Python developers use.

Why would you use a virtual environment Python?

Let’s say you’re working on a project which uses Python3.10 and your default system interpreter is Python3.8 and uses the 1.0 version of that dependency then you need to have Python3.10 installed in order to work on that project.
To get rid of these painful experiences, virtualenv helps you to isolate your different Python environments, dependencies, etc and you can create as many virtual environments as you want. While developing Python applications it is recommended to use a virtual environment to preserve conflicts. 

Creating a Virtual Environment

Step 1: Install the virtualenv package.

pip3 install virtualenv

Install a Virtual Environment Python

Now check your installation

virtualenv --version

Step 2: Create a virtual environment. After running the below command, a directory named virtualenv_name will be created. This is the directory that contains all the necessary executables to use the packages that a Python project would need. 

virtualenv virtualenv_name

Step 3: Create a new virtual environment

virtualenv -p /usr/bin/python3 venv

where venv is the name of the virtual environment you can change it accordingly

Creating a Virtual Environment Python

Step 4: Activate our newly created virtual environment

source venv/bin/activate

Activate a Virtual Environment Python

If everything works well then the name of your virtual environment will appear on the left side of the terminal as shown in the above image which means that the virtual environment is currently active.

Deactivate the Virtual Environment

After you finish working deactivate your virtual environment by simply executing the below command.

deactivate

Deactivate a Virtual Environment Python

As you can see in the above image the name of our virtual environment disappeared.

Last Updated :
21 Nov, 2022

Like Article

Save Article

Python virtual environments allow you to install Python packages in an isolated location from the rest of your system instead of installing them system-wide. Let’s look at how to use the Python venv, short for Python virtual environment, also abbreviated as virtualenv.

In this article, you will learn:

  • The advantages of using virtual environments
  • How to create a venv
  • How to activate and deactivate it
  • Different ways to delete or remove a venv
  • How a venv works internally

Table of Contents

  • 1 Why you need virtual environments
  • 2 Virtual environments vs. other options
  • 3 How to create a Python venv
  • 4 Python venv activation
  • 5 How a Python venv works
  • 6 Deactivate the Python venv
  • 7 Deleting a Python venv
  • 8 Follow the course
  • 9 Learn more
  • 10 Conclusion

Why you need virtual environments

There are multiple reasons why virtual environments are a good idea, and this is also why I’m telling you about them before we continue to the part where we start installing 3rd party packages. Let’s go over them one by one.

Preventing version conflicts

You could argue that installing third-party packages system-wide is very efficient. After all, you only need to install it once and can use the package from multiple Python projects, saving you precious time and disk space. There’s a problem with this approach that may start to unfold weeks or months later, however.

Suppose your project, Project A, is written against a specific version of library X. In the future, you might need to upgrade library X. Say, for example, you need the latest version for another project you started, called Project B. You upgrade library X to the latest version, and project B works fine. Great! But once you did this, it turns out your Project A code broke badly. After all, APIs can change significantly on major version upgrades.

A virtual environment fixes this problem by isolating your project from other projects and system-wide packages. You install packages inside this virtual environment specifically for the project you are working on.

  • Product on sale

    Modules, Packages, And Virtual Environments (2023)

    Modules, Packages, And Virtual Environments (2023)

    £ 39.00

Easy to reproduce and install

Virtual environments make it easy to define and install the packages specific to your project. Using a requirements.txt file, you can define exact version numbers for the required packages to ensure your project will always work with a version tested with your code. This also helps other users of your software since a virtual environment helps others reproduce the exact environment for which your software was built.

Works everywhere, even when not administrator (root)

If you’re working on a shared host, like those at a university or a web hosting provider, you won’t be able to install system-wide packages since you don’t have the administrator rights to do so. In these places, a virtual environment allows you to install anything you want locally in your project.

Virtual environments vs. other options

There are other options to isolate your project:

  1. In the most extreme case, you could buy a second PC and run your code there. Problem fixed! It was a bit expensive, though!
  2. A virtual machine is a much cheaper option but still requires installing a complete operating system—a bit of a waste as well for most use cases.
  3. Next in line is containerization, with the likes of Docker and Kubernetes. These can be very powerful and are a good alternative.

Still, there are many cases when we’re just creating small projects or one-off scripts. Or perhaps you just don’t want to containerize your application. It’s another thing you need to learn and understand, after all. Whatever the reason is, virtual environments are a great way to isolate your project’s dependencies.

There are several ways to create a Python virtual environment, depending on the Python version you are running.

Before you read on, I want to point you to two other tools, Python Poetry and Pipenv. Both these tools combine the functionality of tools you are about to learn: virtualenv and pip. On top of that, they add several extras, most notably their ability to do proper dependency resolution.

To better understand virtual environments, I recommend you learn the basics first though, using this article. I just want to ensure that you know there are nicer ways to manage your packages, dependencies, and virtual environments.

Python 3.4 and above

If you are running Python 3.4+, you can use the venv module baked into Python:

python -m venv <directory>

This command creates a venv in the specified directory and copies pip into it as well. If you’re unsure what to call the directory: venv is a commonly seen option; it doesn’t leave anyone guessing what it is. So the command, in that case, would become:

python -m venv venv

A little further in this article, we’ll look closely at the just-created directory. But let’s first look at how to activate this virtual environment.

All other Python versions

The alternative that works for any Python version is using the virtualenv package. You may need to install it first with pip install:

pip install virtualenv

Once installed, you can create a virtual environment with:

virtualenv [directory]

Python venv activation

How you activate your virtual environment depends on the OS you’re using.

Windows venv activation

To activate your venv on Windows, you need to run a script that gets installed by venv. If you created your venv in a directory called myenv, the command would be:

# In cmd.exe
venv\Scripts\activate.bat
# In PowerShell
venv\Scripts\Activate.ps1

Linux and MacOS venv activation

On Linux and MacOS, we activate our virtual environment with the source command. If you created your venv in the myvenv directory, the command would be:

$ source myvenv/bin/activate

That’s it! We’re ready to rock! You can now install packages with pip, but I advise you to keep reading to understand the venv better first.

How a Python venv works

When you activate a virtual environment, your PATH variable is changed. On Linux and MacOS, you can see it for yourself by printing the path with echo $PATH. On Windows, use echo %PATH% (in cmd.exe) or $Env:Path (in PowerShell). In my case, on Windows, it looks like this:

C:\Users\erik\Dev\venv\Scripts;C:\Program Files\PowerShell\7;C:\Program Files\AdoptOpen....

It’s a big list, and I only showed the beginning of it. As you can see, the Scripts directory of my venv is put in front of everything else, effectively overriding all the system-wide Python software.

So what does this PATH variable do?

When you enter a command that can’t be found in the current working directory, your OS starts looking at all the paths in the PATH variable. It’s the same for Python. When you import a library, Python looks in your PATH for library locations. And that’s where our venv-magic happens: if your venv is there in front of all the other paths, the OS will look there first before looking at system-wide directories like /usr/bin. Hence, anything installed in our venv is found first, and that’s how we can override system-wide packages and tools.

What’s inside a venv?

If you take a look inside the directory of your venv, you’ll see something like this on Windows:

.
├── Include
├── Lib
│   └── site-packages
├── pyvenv.cfg
└── Scripts
    ├── activate
    ├── activate.bat
    ├── Activate.ps1
    ├── deactivate.bat
    ├── pip3.10.exe
    ├── pip3.exe
    ├── pip.exe
    ├── python.exe
    └── pythonw.exe

And on Linux and MacOS:

A Python venv directory tree

Virtualenv directory tree

You can see that:

  • The Python command is made available as both python and python3 (on Linux and MacOS), and the version is pinned to the version with which you created the venv by creating a symlink to it.
  • On Windows, the Python binary is copied over to the scripts directory.
  • All packages you install end up in the site-packages directory.
  • We have activation scripts for multiple shell types (bash, csh, fish, PowerShell)
  • Pip is available under pip and pip3, and even more specifically under the name pip3.7 because I had a Python 3.7 installation at the time of writing this.

Deactivate the Python venv

Once you have finished working on your project, it’s a good habit to deactivate its venv. By deactivating, you leave the virtual environment. Without deactivating your venv, all other Python code you execute, even if it is outside your project directory, will also run inside the venv.

Luckily, deactivating your virtual environment couldn’t be simpler. Just enter this: deactivate. It works the same on all operating systems.

Deleting a Python venv

You can completely remove a virtual environment, but how you do that depends on what you used to create the venv. Let’s look at the most common options.

Delete a venv created with Virtualenv or python -m venv

There’s no special command to delete a virtual environment if you used virtualenv or python -m venv to create your virtual environment, as is demonstrated in this article. When creating the virtualenv, you gave it a directory to create this environment in.

If you want to delete this virtualenv, deactivate it first and then remove the directory with all its content. On Unix-like systems and in Windows Powershell, you would do something like this:

deactivate
# If your virtual environment is in a directory called 'venv':
rm -r venv

Delete a venv with Pipenv

If you used Pipenv to create the venv, it’s a lot easier. You can use the following command to delete the current venv:

pipenv --rm

Make sure you are inside the project directory. In other words, the directory where the Pipenv and Pipenv.lock files reside. This way, pipenv knows which virtual environment it has to delete.

If this doesn’t work, you can get a little nastier and manually remove the venv. First, ask pipenv where the actual virtualenv is located with the following command:

pipenv --env
/home/username/.local/share/virtualenvs/yourproject-IogVUtsM

It will output the path to the virtual environment and all of its files and look similar to the example above. The next step is to remove that entire directory, and you’re done.

Delete a venv with Poetry

If you created the virtualenv with Poetry, you can list the available venvs with the following command:

poetry env list

You’ll get a list like this:

test-O3eWbxRl-py2.7
test-O3eWbxRl-py3.6
test-O3eWbxRl-py3.7 (Activated)

You can remove the environment you want with the poetry env remove command. You need to specify the exact name from the output above, for example:

poetry env remove test-O3eWbxRl-py3.7

Follow the course

Stop feeling like a voodoo coder and learn this stuff properly once and for all. Our Python Fundamentals course extensively explains Modules and packages, Virtual environments, and Package managers. Give it a try, I assure you that you’ll like it!

Learn more

This article is part of a free Python Tutorial. You can browse the tutorial with the navigation buttons at the top and bottom of the article or use the navigation menu. Want to learn more? Here are some great follow-up reads:

  • Next up: how to install packages with pip inside your venv
  • Pipenv is a better way of managing your venv and packages.
  • Learn the most common Linux commands (like cd, mkdir, pwd, etcetera)
  • Official venv documentation: If you want to know all the details and command-line options

Conclusion

You learned how to create, activate, deactivate, and delete virtual environments. We also looked behind the curtains to see why and how a venv works. Now that you know how to create a venv, you need to learn how to install packages inside it. After that, I strongly recommend you to learn about Pipenv or Poetry. These tools combine the management of your virtual environment with proper package and dependency management.

Learn Python properly through small, easy-to-digest lessons, progress tracking, quizzes to test your knowledge, and practice sessions. Each course will earn you a downloadable course certificate.

Виртуальное окружение Python – это «автономное дерево каталогов, которое содержит пакет установки для конкретной версии Python, а также ряд дополнительных пакетов» (цитата из официальной документации).

Посмотрите на следующий комикс xkcd:

Мораль этой истории такова: используйте виртуальные окружения Python осознанно и организованно. Старайтесь не загрязнять вашу системную среду, иначе она станет беспорядочной и крайне неудобной для использования.

Поскольку использование виртуальных окружений потенциально может привести к беспорядку, возникло множество инструментов для управления ими. В этой статье мы рассмотрим некоторые из них:

  • venv
  • virtualenv
  • Poetry
  • Pipenv
  • Pyflow
  • pyenv-virtualenv
  • Conda
  • Hatch

Используйте встроенный venv

Примечание: команда virtualenv является «надмножеством» собственной команды python -m venv, описанной в этом разделе. Фактически, если вам нужна скорость и дополнительные функции virtualenv, просто замените везде python -m venv на virtualenv.

К счастью, модуль venv и pip обычно поставляются вместе с Python. Чтобы создать виртуальную среду в каталоге .venv, попробуйте следующее:

python -m venv .venv

Давайте разберём это подробнее. Мы используем исполняемый файл Python для версии Python, которую хотим использовать в виртуальном окружении. Это может быть python, как указано выше, или python3, python3.8, python3.9 и даже pypy3.

Затем мы указываем python выполнить модуль venv. Следом пишем имя каталога, в котором хотим разместить виртуальное окружение. Как видно выше, я обычно использую имя .venv или, для большей наглядности, venv.

После некоторой паузы будет создан новый каталог с именем .venv, который вы можете увидеть, выполнив команду ls или dir. (На Mac и Linux из-за точки в начале имени файл будет скрыт. Чтобы увидеть его в списке файлов, используйте команду ls -a). Вы можете указать любое имя каталога вместо .venv.

Если вместо этого вы видите что-то вроде "The virtual environment was not created successfully because ensurepip is not available" или другую ошибку, связанную особенностями вашего дистрибутива, почитайте, как установить pip и venv.

[python_ad_block]

Активация виртуального окружения

Теперь вы можете активировать виртуальное окружение с помощью следующей команды:

source ./.venv/bin/activate

или в Windows:

.\venv\Scripts\Activate.ps1

Если вы не используете Bash или Powershell, вы можете заглянуть в каталог ./venv/bin или .\Venv\Scripts, чтобы увидеть другие параметры для CMD, fish или csh.

После активации предложение командной строки должно измениться: в нем появится имя каталога виртуального окружения. Что-то вроде:

(.venv) [default command prompt] $

Это (.venv) (или другое выбранное вами имя каталога) является признаком того, что вы активировали свое виртуальное окружение. Она не останется активной после перезагрузки компьютера или запуска другой оболочки или открытия новой вкладки терминала. Привыкайте запускать скрипт активации.

Редакторы/IDE иногда могут управлять виртуальным окружением и даже автоматически активировать его. Есть инструкции VSCode, плагины для Atom, для Vim, для Sublime и, конечно же, PyCharm.

После активации вы сможете попробовать сделать так:

(.venv) $ python
>>> import sys
>>> sys.executable
'/home/my_username/sample_python/.venv/bin/python'

Как видите, исполняемый файл находится в каталоге вашего виртуального окружения. Если виртуальное окружение не активно, sys.executable должен читать что-то вроде /usr/bin/python или C:\\Python38\\python.exe.

Выполнение скриптов Python в виртуальном окружении

Вы можете выполнять скрипты Python двумя способами:

  1. Активировав виртуальное окружение, можно выполнить python my_script_name.py
  2. Запустить скрипт можно и без активации виртуального окружения, но тогда нужно писать, например, ./.venv/bin/python my_script_name.py

Деактивация виртуального окружения

Чтобы выйти из виртуального окружения, отключите его. Это можно сделать так:

(.venv) $ deactivate

Для повторной активации повторите приведенные выше инструкции.

Установка пакетов

Повторно активируйте виртуальную среду и установите что-нибудь с помощью pip:

(.venv) $ pip install arrow

Сначала пакеты и зависимости нужно установить. После этого вы сможете импортировать и использовать эти пакеты.

Вы можете выйти из системы, забыть о Python, вернуться через несколько недель и повторно активировать свое виртуальное окружение. Пакеты по-прежнему будут установлены. Но только в этом виртуальном окружении. Они не будут захламлять вашу системную среду Python или другие виртуальные окружения.

Уничтожение виртуального окружения

«Мое виртуальное окружение не подлежит ремонту», – скажете вы? Такое случается. Это безопасность использования виртуальных окружений. Что делать?

Сжечь дотла.

rm -r .venv

Всё ушло. Надеюсь, вы помните список пакетов (вы же сначала выполнили pip freeze или pip list, чтобы получить список, верно?).

Затем воссоздайте виртуальное окружение, как описано выше.

virtualenv

Инструмент virtualenv очень похож на python -m venv. Фактически, модуль venv основан на virtualenv. Однако использование virtualenv вместо python -m venv дает сразу несколько очевидных преимуществ:

  • virtualenv обычно быстрее, чем python -m venv
  • Такие инструменты, как pip, setuptools и wheel, часто более актуальны и кэшированы (отсюда и повышение производительности). В терминах virtualenv это seed packages. И да, вы можете добавлять другие seed packages.

Использование virtualenv

Несколько хороших команд virtualenv:

  • virtualenv --help покажет вам, где должен быть файл конфигурации, если вы захотите установить какие-то настройки
  • virtualenv --upgrade-embed-wheels обновит все seed packages, такие как pip и т. д., до последних версий.

В остальных случаях можете следовать инструкциям для venv, приведенным выше, но используйте virtualenv вместо python -m venv.

Установка virtualenv

Вы можете установить virtualenv из репозиториев менеджера пакетов (например, используя apt или dnf).

Но мы очень рекомендуем использовать pipx.  После установки pipx вы сможете запустить установку virtualenv:

pipx install virtualenv

Poetry

virtualenv и venv полезны и просты, они делают то, что нам нужно и делают это хорошо. Poetry – ещё один инструмент для удобного управления не только виртуальными окружениями, но и проектами и зависимостями.

Установка Poetry

Вы можете использовать официальную документацию для установки данного модуля.

Решите, где Poetry будет размещать виртуальные окружения

По умолчанию Poetry имеет центральное место для установки виртуальных окружений. Это хорошо, если вы не хотите, чтобы каталог вашего проекта содержал каталог виртуального окружения (то есть, если не хотите видеть каталог venv или .venv в вашем проекте).

Но если вы приверженец традиций и как раз хотите, чтобы файлы виртуального окружения находились в каталоге .venv в каждом проекте, попробуйте следующее:

poetry config virtualenvs.in-project true

Это глобальная настройка Poetry позволяет размещать виртуальные окружения в папках проектов.

Взаимодействие с виртуальным окружением Poetry

Poetry предназначен для управления проектами, поэтому для создания нового виртуального окружения сначала создайте каталог проекта и войдите в него:

poetry new my_project
cd my_project

Когда виртуальное окружение потребуется в первый раз, оно будет создано автоматически.

Чтобы активировать виртуальное окружение, сделайте следующее:

poetry shell

Для выхода из этого виртуального окружения воспользуйтесь exit, Ctrl-d или вашим любимым способом выхода из оболочки.

Без предварительного входа в виртуальное окружение вы можете выполнить любую команду, доступную в нем, с помощью poetry run. К примеру, чтобы запустить python в виртуальном окружении, не входя в него, выполните следующую команду:

poetry run python

Добавление пакетов с помощью Poetry

В отличие от традиционного подхода, в Poetry мы не используем pip install для установки пакетов. Вместо этого используйте poetry add:

poetry add arrow

Эта команда установит arrow и запишет его как зависимость в файле pyproject.toml.

Вы можете увидеть множество других команд Poetry с помощью poetry help.

Pipenv

Интересно, что в официальном руководстве Python по установке пакетов прямо говорится, что «Управление несколькими виртуальными окружениями напрямую может быть утомительным, поэтому…», а затем упоминается Pipenv.

Несмотря на эту почти официальную рекомендацию, мы продолжаем пользоваться virtualenv, так как он надежен и прост, или Poetry, потому что он обеспечивает отличное управление проектами и зависимостями.

Тем не менее, Pipenv уже некоторое время пользуется популярностью и заслуживает внимания и уважения. Если вам он нравится, у вас могут быть на то веские причины.

Установка Pipenv

Хотя документация Pipenv рекомендуют использовать pip или ваш менеджер пакетов, мы настоятельно рекомендуем использовать pipx для установки Pipenv:

pipx install pipenv

Взаимодействие с виртуальным окружением Pipenv

При использовании Pipenv важно сначала создать каталог для вашего проекта. (Это вообще хороший шаг при работе с любым инструментом).

Когда виртуальное окружение потребуется в первый раз, оно будет создано автоматически.

Чтобы активировать виртуальное окружение, выполните следующее:

pipenv shell

Вы можете выполнить любую команду, доступную в виртуальном окружении, без предварительного входа в него. Делается это через pipenv run. Например, откроем python в виртуальном окружении:

pipenv run python

Установка пакетов с помощью Pipenv

Для установки пакетов вместо pip install Pipenv использует pipenv install.

pipenv install arrow

Вы можете увидеть множество других команд с помощью pipenv -h.

Pyflow

Если вам нужен инструмент для упрощения работы с виртуальными окружениями, мы бы посоветовали virtualenv или Poetry.

Но если вы хотите попробовать что-то малоизвестное, но довольно многообещающее, особенно если вы имеете дело с разными версиями Python, тогда стоит обратить внимание на Pyflow.

Возьмите Poetry, добавьте изящное управление версиями Python, снимите шляпу с conda и напишите все это на Rust – и результат будет немного похож на Pyflow. Время покажет, вырастет ли Pyflow и получит ли признание сообщества.

Установка Pyflow

Чтобы установить Pyflow, перейдите на страницу релизов Pyflow, загрузите и установите пакет, соответствующий вашей платформе.

Взаимодействие с виртуальным окружением Pyflow

Чтобы создать новое виртуальное окружение в Pyflow, сначала создайте проект:

pyflow new my_project

Уникальная особенность Pyflow: он предложит вам версию Python. Кроме того, если вы укажете версию, которая еще не установлена, он установит ее для вас довольно быстро (не компилируя с нуля, как это делает pyenv).

Затем сделайте новый каталог текущим рабочим каталогом:

cd my_project

Когда виртуальное окружение потребуется в первый раз, оно будет создана автоматически.

Чтобы запустить Python в виртуальном окружении, сделайте следующее:

pyflow python

Фактически, вы можете выполнить любую команду, доступную в окружении, выполнив pyflow нужная-команда. Это сокращение от pyflow run нужная-команда.

Не существует способа активации виртуального окружения, специфичного для Pyflow. Покопаться в установленном виртуальном окружении можно так:

.\__pypackages__\3.8\.venv\Scripts\Activate.ps1

Это для Windows Powershell. Для Mac или Linux используйте следующее:

source ./__pypackages__/3.8/.venv/bin/activate

Однако у нас есть подозрение, что Pyflow предполагается пользоваться не так. Лучше запускайте все с помощью pyflow нужная-команда или pyflow python.

Установка пакетов в Pyflow

Как и во многих других инструментах, в Pyflow для установки пакетов не используется pip install. Вместо этого команда pyflow install установит пакеты в виртуальное окружение и добавит их в pyproject.toml.

pyflow install arrow

Прочие команды Pyflow можно увидеть, выполнив pyflow help.

pyenv-virtualenv

Если вы хотите использовать virtualenv для управления виртуальными окружениями, а также управлять несколькими версиями Python, вам может подойти pyenv-virtualenv.

Не используйте pyenv (или любой другой инструмент управления версиями Python), если вы не уверены, что он вам действительно нужен.

pyenv не предназначен для управления виртуальными окружениями. Он управляет версиями Python. Другими словами, чтобы понять, сможет ли pyenv решить какие-либо из ваших проблем, сперва оцените свои потребности и возможности самого pyenv.

Установка pyenv-virtualenv

pyenv-virtualenv – это плагин для pyenv, поэтому его необходимо установить.

Для этого следуйте официальной документации или используйте автоматический установщик. Автоматический установщик – это просто curl https://pyenv.run | bash.

pyenv не работает в Windows. Существует форк pyenv для Windows. Однако, похоже, он несовместим с плагинами pyenv, такими как pyenv-virtualenv.

Взаимодействие с виртуальным окружением с помощью pyenv-virtualenv

Чтобы создать новое виртуальное окружение с помощью pyenv-virtualenv, выполните следующую команду:

pyenv virtualenv 3.8.5 venv38

Это создаст виртуальное окружение в текущем каталоге. Версия Python в окружении будет 3.8.5, а окружение будет иметь псевдоним venv38.

Если вы не уверены, какие версии Python доступны для использования pyenv:

pyenv versions

и/или:

pyenv install --list

После того, как вы успешно создали виртуальное окружение, оно должно появиться в списке:

pyenv virtualenvs

Виртуальные окружения имеют по две записи: длинные и более короткие псевдонимы.

Чтобы активировать виртуальное окружение вручную, можно использовать короткий псевдоним:

pyenv activate venv38

Отключение виртуального окружения:

pyenv deactivate

Обратите внимание, что pyenv-virtualenv предлагает дополнительную функцию, которая автоматически активирует виртуальные окружения, когда вы переходите в каталог с файлом .python-version, который содержит имя допустимого виртуального окружения. Это может быть достоинством, а может и раздражать — в зависимости от ваших личных шаблонов работы. В инструкциях по установке написано, как активировать эту фичу. Если вы использовали автоматический установщик и следовали его инструкциям, возможно, она уже включена.

Находясь в активированном виртуальном окружении, вы можете устанавливать пакеты с помощью pip, как указано в инструкциях venv выше.

Вы можете найти справку с помощью pyenv help и pyenv help virtualenv.

Conda

Conda – это не просто еще один пакет Python или менеджер окружений. Это альтернативная экосистема Python. Репозиторий пакетов conda отличается от репозитория PyPI, используемого большинством менеджеров пакетов. В репозитории Conda ~1500 пакетов. В репозитории PyPI ~ 150 000. Тем не менее, в Conda можно использовать pip, если вам это нужно.

Установка Conda

Если вам нужна большая установка Python и все инструменты, обратите внимание на Anaconda. Miniconda предоставляет инструмент командной строки conda и только те зависимости, которые необходимы для начала работы. Обычно этого хватает. Если вы не уверены, что вам подходит, Anaconda или Miniconda, есть полезное сравнение.

От редакции Pythonist. Можем предложить статью «Развертываем Anaconda – дистрибутив Python для data science».

Чтобы установить Miniconda, найдите соответствующий установщик, загрузите его и установите пакет. Есть вероятность, что ваш менеджер пакетов (apt, dnf, brew и т.д.) уже может иметь Conda.

Используя Bash, можно сделать следующее:

conda init bash
conda config --set auto_activate_base false

Первая строка добавляет автоматическую активацию «базовой» среды Conda в ваш .bashrc файл. Вторая строка добавляет файл ~/.condarc с этой настройкой в ваш домашний каталог.

Взаимодействие с виртуальным окружением в Conda

Новые виртуальные окружения создаются при помощи команды conda create. При этом указывается имя окружения и версия python (рекомендуется):

conda create --name env38 python=3.8.5

После создания вы можете активировать виртуальное окружение:

conda activate env38

При активации нужно указывать то имя окружения, которое вы прописали при его создании.

Чтобы отключить виртуальное окружение:

conda deactivate

Команды conda activate и conda deactivate работают одинаково независимо от оболочки или платформы.

Установка пакетов с помощью Conda

Чтобы установить пакет с помощью Conda, используйте conda install. Но сперва убедитесь, что виртуальное окружение активировано (conda activate).

conda install arrow

Одна крутая вещь о Conda: она точно скажет вам, где и что будет делать.

Hatch

Hatch немного похож на Pyflow в том, что он модный (например, использует pyproject.toml), непонятный и выполняет множество функций.

Установка Hatch

Для установки Hatch мы предлагаем использовать pipx.

pipx install hatch

Взаимодействие с виртуальным окружением в Hatch

Чтобы создать новое виртуальное окружение с Hatch, сначала создайте проект:

hatch new my_project

hatch new автоматически создает виртуальное окружение. Вы можете сделать новый каталог текущим рабочим:

cd my_project

Затем используйте hatch shell, чтобы войти в виртуальное окружение. Вы должны иметь возможность запускать Python и т.д. из новой оболочки.

Установка пакетов в Hatch

Как и во многих других инструментах, в Hatch не используется pip install. Но hatch install установит всё необходимое в виртуальном окружении.

hatch install arrow

Другие команды можно посмотреть с помощью hatch -h.

Заключение

Виртуальные окружения Python — отличная вещь для удобной и безопасной работы. В этой статье мы разобрали самые разные инструменты Python для управления виртуальными окружениями. Выбор инструмента – дело субъективное. Прежде чем решить, подумайте о том, кто вы, что делаете с помощью Python и каковы ваши потребности и желания.

Вот несколько замечаний, которые могут помочь вам сориентироваться при выборе:

  • Вы создаете пакет/проект и хотите иметь что-то вроде швейцарского ножа с кучей функций, да еще чтоб популярность этого инструмента в сообществе росла? Попробуйте Poetry.
  • Вы минималист/традиционалист и гордитесь этим? Ваш выбор — venv (virtualenv, если дополнительный инструмент вас не покоробит)
  • Пишете простой скрипт? Вам хватит и venv, если, конечно, у вас уже не установлен virtualenv.
  • Хотите управлять разными версиями Python, а нужные вам пакеты хранятся в репозитории Conda? Тогда Conda.
  • Хотите управлять разными версиями Python, но вам нужны не только пакеты Conda? pyenv-virtualenv.
  • Вы любите новинки и готовы рискнуть, и тоже хотите управлять разными версиями Python? Pyflow.
  • Занимаетесь наукой о данных? Остановитесь на Conda.
  • Вы уже используете ___ и вам он нравится? Вот и пользуйтесь им дальше!
  • Вы попробовали ___ и вам не понравилось? Используйте что-нибудь другое!

Перевод статьи «Python Tools for Managing Virtual Environments».

  • Как выйти из биос на ноутбуке asus windows 10
  • Как выйти из игры на компьютере с помощью клавиатуры на рабочий стол windows 10
  • Как выйти из безопасного режима другая оболочка windows 10
  • Как выйти из безопасности режима windows 11
  • Как выйти из безопасного режима на ноутбуке asus windows 10