How to deactivate venv
How to deactivate venv
how to deactivate virtualenv from a bash script
I’m a novice in shell scripting, but I want to make a bash script for activate/deactivate a virtual enviroment using virtualenv. Then I want to use this script like a service in Ubuntu copying it inside /etc/init.d folder.
In my script, I have a variable like this: VENV=/opt/odoo/odoo_server/venv_oddo/bin
This variable represents the bin path in my virtual enviroment.
This is possible because activate is a file inside bin directory in the virtual enviroment.
The problem is that doesn’t exist a file named deactivate, but deactivated is a function inside the bin/activate file in the virtual enviroment.
6 Answers 6
Trending sort
Trending sort is based off of the default sorting method — by highest score — but it boosts votes that have happened recently, helping to surface more up-to-date answers.
It falls back to sorting by highest score if no posts are trending.
Switch to Trending sort
Edit: also in most cases it is a better idea to spell full python path in your scripts and services. It is stateless, more portable and works pretty much everywhere. So instead of doing
it is usually preferable to do
Trust me, it will save you debugging time)
It’ll be hard to make a service like that useful.
will source the activate script, i.e. run its contents as if they were part of the shell or script where you source them. virtualenvironment ‘s activate is designed for this usage. In contrast, just executing the script normally with
will run its content in a subshell and won’t have any useful effect.
However, your service script will already run in a subshell of its own. So except for any python commands you run as part of the service start process, it won’t have any effect.
On the plus side, you won’t even have to care about de-activating the environment, unless you want to run even more python stuff in the service start process, but outside of your virtualenv.
In order to use them in a script, they need to be defined there, because shell functions do not propagate to child shells.
To define these functions, source the virtualenvwrapper.sh script in the shell script where you intend to invoke these functions, e.g.:
That allows you to invoke these functions in your shell script like you would do in the shell:
Python. Урок 17. Виртуальные окружения
Что такое виртуальное окружение и зачем оно нужно?
Во-первых : различные приложения могут использовать одну и туже библиотеку, но при этом требуемые версии могут отличаться.
Во-вторых : может возникнуть необходимость в том, чтобы запретить вносить изменения в приложение на уровне библиотек, т.е. вы установили приложение и хотите, чтобы оно работало независимо от того обновляются у вас библиотеки или нет. Как вы понимаете, если оно будет использовать библиотеки из глобального хранилища ( /usr/lib/pythonXX/site-packages ), то, со временем, могут возникнуть проблемы.
Для решения данных вопросов используется подход, основанный на построении виртуальных окружений – своего рода песочниц, в рамках которых запускается приложение со своими библиотеками, обновление и изменение которых не затронет другие приложение, использующие те же библиотеки.
ПО позволяющее создавать виртуальное окружение в Python
Программное обеспечение, которое позволяет создавать виртуальные окружения в Python можно разделить на те, что входят в стандартную библиотеку Python и не входят в нее. Сделаем краткий обзор доступных инструментов (хороший пост на эту тем есть на stackoverflow ).
Virtualenvwrapper – это обертка для virtualenv позволяющая хранить все изолированные окружения в одном месте, создавать их, копировать и удалять. Предоставляет удобный способ переключения между окружениями и возможность расширять функционал за счет plug-in ’ов.
virtualenv
Установка virtualenv
Virtualenv можно установить с использованием менеджера pip (ссылка на статью), либо скачать исходные коды проекта и установить приложение вручную.
Установка с использованием pip.
Для установки virtualenv откройте консоль и введите следующую команду:
Установка из исходного кода проекта.
В этом случае, вам нужно будет выполнить чуть большее количество действий.
Введите в консоли следующий набор команд:
X.X – это версия приложения, ее вам нужно знать заранее.
Создание виртуального окружения
Виртуальное окружение создается следующей командой:
PRG1 в данном случае – это имя окружения.
Активация виртуального окружения
Для активации виртуального окружения воспользуйтесь командой (для Linux ):
для Windows команда будет выглядеть так:
Команда source выполняет bash- скрипт без запуска второго bash- процесса.
Если команда выполнилась успешно, то вы увидите, что перед приглашением в командной строке появилась дополнительная надпись, совпадающая с именем виртуального окружения.
Если вы создадите виртуальное окружение с ключем –system-site-packages :
то в рамках окружения PRG1 вы будите иметь доступ к глобальному хранилищу пакетов:
Деактивация виртуального окружения
venv
Создание виртуального окружения
Для создания виртуального окружения с именем PRG2 с помощью venv выполните следующую команду:
Активация виртуального окружения
Активация виртуального окружения в Linux выполняется командой:
Деактивация виртуального окружения
Деактивация выполняется командой deactivate (работает как в Windows, так и в Linux )
Полезные ссылки
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
How to leave/exit/deactivate a Python virtualenv
I’m using virtualenv and the virtualenvwrapper. I can switch between virtualenv’s just fine using the workon command.
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?
14 Answers 14
Trending sort
Trending sort is based off of the default sorting method — by highest score — but it boosts votes that have happened recently, helping to surface more up-to-date answers.
It falls back to sorting by highest score if no posts are trending.
Switch to Trending sort
Usually, activating a virtualenv gives you a shell function named:
which puts things back to normal.
Older conda versions instead implement deactivation using a stand-alone script:
If this doesn’t work, try
I defined an alias, workoff, as the opposite of workon:
It is easy to remember:
To activate a Python virtual environment:
I found that when within a Miniconda3 environment I had to run:
Neither deactivate nor source deactivate worked for me.
If you are using a standard shell, open your
/.zshrc if you use Oh My Zsh. Add these two lines:
To activate an existing virtualenv, use command workon :
In order to deactivate your virtualenv:
Here is my tutorial, step by step on how to install virtualenv and virtualenvwrapper.
For my particular case, I go to to the working directory
Then I activate my env like this:
From this same working folder ( /myworkingdirectory ) to deactivate, I tried this but it does nothing:
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 venv s don’t leave any residual changes behind:
To activate:
To deactivate:
$ exit OR [CTRL] + [D]
Установка и использование virtualenv в Python
virtualenv — это инструмент для создания изолированной среды Python. У такой среды есть отдельна установка python, при ее использовании загруженные библиотеки недоступны другим. Можно сделать так, чтобы у этой среды не было доступа к глобальным библиотекам.
Virtualenv — простой и рекомендованный способ настройки среды Python.
Отличия virtualenv и venv
Venv — это пакет, который идет по умолчанию с Python 3.3+. В версии Python 2 его нет.
Virtualenv — более продвинутая библиотека. По ссылке можно ознакомиться с основными отличиями.
Виртуальную среду можно создать и с помощью venv, но все-таки рекомендуется установить и использовать virtualenv для полноценной работы.
Установка virtualenv с помощью pip
Для установки virtualenv с Python нужно использовать pip. Желательно предварительно обновить этот инструмент.
После обновления можно установить и virtualenv:
Создание виртуальной среды
1. Перейдите в директорию, в которой вы хотите создать виртуальную среду(например папка проекта).
Назвать среду можно как угодно
После выполнения команды вы увидите логи:
Эта команда создает локальную копию среды. Работая с ней, важно не забывать об активации, чтобы использовались нужные версии конкретных инструментов и пакетов.
3. Для активации новой виртуальной среды используйте команду:
После этого название текущей среды отобразится слева от символа ввода: (venv_name) username@desctop:
Теперь при установке любого пакета с помощью pip он будет размещаться в папках этой среды, изолированно от глобальной установки.
Деактивации virtualenv
Введите ее и приставка venv_name пропадет. Вы вернетесь к использованию глобально версии python.
Удаление виртуальной среды
Для удаления виртуальной среды достаточно просто удалить папку проекта. Для этого используется следующая команда:
Решение популярных ошибок
Ошибки при создании virtualenv. При попытке создать virtualenv с Python 3.7 могут возникнуть следующие ошибки.
Использование полного пути к виртуальной среде. Может быть такое, что при использовании команды virtualenv будет использована не та версия. Для решения проблемы нужно лишь задать полные пути как к virtualenv, так и к Python в системе.
А получить их можно с помощью этой команды:
Leaving and Switching Between Virtual Environments
aravind on Sept. 17, 2019
is it possible to customize the (venv) text shown? Lets say you are working on 2 or more virtual envs at the same time in different terminals, need a way to visually distinguish which venv you are currently in.
Dan Bader RP Team on Sept. 17, 2019
If you create a virtual environment with a different folder name, the prompt text will be different as well to reflect that change. So for example you could create a second virtual env like this:
aravind on Sept. 17, 2019
Thanks Dan, clear.
Dan Bader RP Team on Sept. 17, 2019
Ok great, you’re welcome!
Eelco on Nov. 11, 2020
Only then your nice aliases won’t work any more. Or one needs to create a naming scheme like venv_myprojectname and build a bit more logic in the aliases you show on one of the next slides.
Dan Bader RP Team on Nov. 12, 2020
@Eelco: Yep you’re absolutely right, that’s a downside of this approach and why I’m a big fan of the “one venv per project, under a standard naming scheme” system.
DoubleA on Jan. 16, 2021
Hey Dan, what a clear explanation! Really appreciated learning this non-trivial stuff. Perhaps one side note for those on Windows machines: when playing with vevns I’ve discovered that one can deactivate an active venv being anywhere in the OS file system tree, even in the route directory. However, for activating a specific vevn one must be in the Script directory of the target venv.