Как активировать virtualenv внутри терминала PyCharm?
Я настроил PyCharm, создал свой virtualenv (либо через команду virtual env, либо непосредственно в PyCharm) и активировал эту среду в качестве моего интерпретатора. Все работает просто отлично.
однако, если я открываю терминал с помощью "Tools, Open Terminal", предоставленное приглашение оболочки не С помощью виртуального env; я все еще должен использовать source ~/envs/someenv/bin/activate в этом терминале, чтобы активировать его.
другой метод заключается в активации среды в оболочке, и запустить PyCharm из этой среды. Это "работоспособно", но довольно уродливо, и означает, что у меня есть серьезные проблемы, если я переключаю среды или проекты из PyCharm: теперь я использую совершенно неправильную среду.
есть ли другой, гораздо более простой способ иметь" инструменты, открытый терминал " автоматически активировать виртуальную среду?
20 ответов:
Edit:
согласно https://www.jetbrains.com/pycharm/whatsnew/#v2016-3-venv-in-terminal, PyCharm 2016.3 (выпущен Nov 2016) имеет поддержку virutalenv для терминалов из коробки
Auto virtualenv поддерживается для bash, zsh, fish и Windows cmd. Вы можно настроить параметры оболочки в настройках (настройки) / инструменты | Терминал.
Старый Метод:создайте файл
.pycharmrcв вашей домашней папке со следующим содержимымsource ~/.bashrc source ~/pycharmvenv/bin/activateиспользование пути virtualenv в качестве последнего параметра.
затем установите параметры оболочки - > настройки проекта - > Путь оболочки к
/bin/bash --rcfile ~/.pycharmrc
для пользователей Windows при использовании PyCharm и виртуальной среды под Windows можно использовать параметр /k для cmd.exe для автоматической установки виртуальной среды.
перейдите в Настройки, терминал, оболочку по умолчанию и добавьте
/K <path-to-your-activate.bat>.У меня нет репутации, чтобы прокомментировать более ранний ответ, поэтому разместите эту исправленную версию. Это действительно экономит много времени.
обновление:
Примечание: Pycharm теперь поддерживает виртуальную окружающая среда напрямую и, кажется, хорошо работает для меня - так что мой обходной путь больше не нужен.
для пользователей Windows: при использовании PyCharm с виртуальной средой вы можете использовать до
cmd.exeдля автоматической настройки виртуальной среды.PyCharm 3 или 4:
Settings,Terminal,Default shellи добавить/K <path-to-your-activate.bat>.PyCharm 5:
Settings,Tools,Terminalи добавить/K <path-to-your-activate.bat>доShell path.PyCharm 2016.1 или 2016.2:
Settings,Tools,Terminalи добавить""/K <path-to-your-activate.bat>""доShell pathи добавить (обратите внимание на кавычки). Также добавьте кавычки вокруг УМК.exe, в результате чего:
"cmd.exe" /k ""C:\mypath\my-venv\Scripts\activate.bat""
основываясь на ответах Питера и экспериментах, я придумал хорошее "общее решение", которое решает следующее:
- восстанавливает поведение оболочки. PyCharm обычно запускает оболочку входа, но --rcfile остановил это. Скрипт по-прежнему использует --rcfile, но пытается эмулировать поведение вызова оболочки входа.
- устраняет необходимость создания rcfile для каждой среды
- устраняет необходимость обновления проекта настройки при изменении среды.
поместите этот скрипт в каталог bin где-нибудь. Например, ~ / bin / pycharmactivate
if [ -r "/etc/profile" ] ; then . /etc/profile ; fi if [ -r "~/.bash_profile" ] ; then . ~/.bash_profile elif [ -r "~/.bash_login" ] ; then . ~/.bash_login elif [ -r "~/.profile" ] ; then . ~/.profile fi ACTIVATERC=`cat .idea/workspace.xml | perl -n -e 'print "$1/bin/activate" if m:option name="SDK_HOME" value="\$USER_HOME\$(.*)/bin/python":'` if [ -n "$ACTIVATERC" ] ; then . "$HOME/$ACTIVATERC" ; else echo "Could not find virtualenv from PyCharm" ; fiзатем установите путь оболочки PyCharm в:
/bin/bash --rcfile ~/bin/pycharmactivate
спасибо Крис, твой скрипт работал для некоторых проектов, но не все на моей машине. Вот сценарий, который я написал, и я надеюсь, что кто-нибудь найдет его полезным.
#Stored in ~/.pycharmrc ACTIVATERC=$(python -c 'import re import os from glob import glob try: #sets Current Working Directory to _the_projects .idea folder os.chdir(os.getcwd()+"/.idea") #gets every file in the cwd and sets _the_projects iml file for file in glob("*"): if re.match("(.*).iml", file): project_iml_file = file #gets _the_virtual_env for _the_project for line in open(project_iml_file): env_name = re.findall("~/(.*)\" jdkType", line.strip()) # created or changed a virtual_env after project creation? this will be true if env_name: print env_name[0] + "/bin/activate" break inherited = re.findall("type=\"inheritedJdk\"", line.strip()) # set a virtual_env during project creation? this will be true if inherited: break # find _the_virtual_env in misc.xml if inherited: for line in open("misc.xml").readlines(): env_at_project_creation = re.findall("\~/(.*)\" project-jdk", line.strip()) if env_at_project_creation: print env_at_project_creation[0] + "/bin/activate" break finally: pass ') if [ "$ACTIVATERC" ] ; then . "$HOME/$ACTIVATERC" ; fi
PyCharm 4 теперь имеет virtualenvs интегрированные в IDE. При выборе переводчика проекта, вы можете создать, добавить, или выберите виртуальное окружение. Они добавили "консоль Python", которая работает в настроенном интерпретаторе проекта.
если вы используете версию windows, это довольно легко. Если у вас уже есть виртуальная среда просто перейдите в свою папку, найдите
activate.batвнутриScriptsпапка. копировать это полное путь и вставьте его в терминал pycharm, а затем нажмитеEnterи ты молодец!Если вам нужно создать новую виртуальную среду :
перейти к файлам > настройки, а затем искать
project interpreter, откройте его, нажмите на кнопку передач и создать среду, где вы хотите, а затем следуйте первому абзацу.
Я только что добавил скрипт с именем pycharmactivate в мой домашний каталог. Установите значение PyCharm (4.0.1) File > Settings > Tools > Terminal > Shell path to /bin/bash --rcfile ~/pycharmactivate. Возможно, не лучшее решение, если у вас есть разные каталоги/имена проектов и virtualenv, но это работает для меня. Этот сценарий содержит следующие 3 строки и предполагает, что ваш virtualenv имеет то же имя, что и ваш проект dir.
source ~/.bashrc projectdir=${PWD##*/} source ~/.virtualenvs/$projectdir/bin/activate
продолжение ответа Питера, здесь Mac версия
.pycharmrcfile:source /etc/profile source ~/.bash_profile source <venv_dir>/bin/activateкурица
у меня есть решение, которое работало на моей машине Windows 7.
Я считаю, что терминал PyCharm является результатом его работы
cmd.exe, который будет загружать окнаPATHпеременная, и использовать версию Python, что он находит первый в этомPATH. Чтобы изменить эту переменную, щелкните правой кнопкой мыши Мой Компьютер -->свойства -->Дополнительные Параметры Системы -->Advanced tab -->Переменные Среды... кнопка. Внутри системные переменные раздел, выберите и отредактируйтеPATHпеременной.вот соответствующая часть моего
PATHдо редактирования:C:\Python27\;
C:\Python27\Lib\site-packages\pip\;
C:\Python27\Scripts;
C:\Python27\Lib\site-packages\django\bin;...и после редактирование
PATH(теперь только 3 строки):C: [project_path]\virtualenv-Py2.7_Dj1. 7\Lib\site-packages\pip;
C: [project_path]\virtualenvs\virtualenv-Py2.7_Dj1. 7\Scripts;
C: [project_path]\virtualenvs\virtualenv-Py2.7_Dj1. 7\Lib\site-packages\django\bin;чтобы проверить это, откройте новая терминал windows ( Start --> тип
cmdи нажмите Enter) и посмотреть, если он использует виртуальную среду. Если это сработает,перезапустить PyCharm а затем проверить его в терминале PyCharm.
это то, что я делаю: создайте activate_env.bat (windows,возможно .sh в linux) файл в исходном коде folde:
/env_yourenvlocate/scripts/activate.batи еще один файл deactivate_env.летучая мышь:
/env_yourenvlocate/scripts/deactivate.batкаждый раз, когда вы открываете окно терминала, просто запустите файл bat для активации / деактивации virtualenv, вы останетесь в пути исходного кода, не нужно менять путь и обратно.
E:\Projects\django_study\src>active_env.bat E:\Projects\django_study\src>../env_django_study/scripts/activate.bat (env_django_study) E:\Projects\django_study\src> (env_django_study) E:\Projects\django_study\src>deactive_env.bat (env_django_study)E:\Projects\django_study\src>../env_django_study/scripts/deactivate.bat E:\Projects\django_study\src>
Если ваш Pycharm 2016.1.4 v и выше, вы должны использовать
"default path" /K "<path-to-your-activate.bat>"не забывайте кавычки
Другой альтернативой является использование virtualenvwrapper для управления виртуальными средами. Оказывается, что когда-то virtualenvwrapper скрипт активируется, pycharm может использовать это, а затем простой
workonкоманда будет доступна из консоли pycharm и представит вам доступные виртуальные среды:kevin@debian:~/Development/django-tutorial$ workon django-tutorial FlaskHF SQLAlchemy themarkdownapp kevin@debian:~/Development/django-tutorial$ workon django-tutorial (django-tutorial)kevin@debian:~/Development/django-tutorial$
этот метод должен работать с произвольными виртуальными средами для каждого проекта, и он не делает предположений о вашей среде, поскольку он использует созданные вами крючки.
вы пишете:
- глобальный скрипт, который вызывает Хук
- скрипт крючка для проекта PyCharm (не обязательно)
учитывая, что текущая последняя PyCharm (Community 2016.1) не допускает настройки терминала в проекте начать с сценарий, который вызывает определенный крючок проекта. Это мой
~/.pycharmrc:if [ -r ".pycharm/term-activate" ]; then echo "Terminal activation hook detected." echo "Loading Bash profile..." source ~/.bash_profile echo "Activating terminal hook..." source ".pycharm/term-activate" source activate $PYCHARM_VENV fiесли вы используете что-то другое, чем Bash, вызовите свой собственный
.bash_profileэквивалент, если вы хотите.теперь установите PyCharm "Tools - > Terminal - > Shell Path" для вызова этого скрипта, например:
/bin/bash --rcfile ~/.pycharmrcнаконец, для каждого проекта PyCharm вам нужно активировать определенную виртуальную среду, создайте файл в корне проекта PyCharm
.pycharm/term-activate. Это ваш крючок, и он будет просто определите имя желаемой виртуальной среды для вашего проекта PyCharm:export PYCHARM_VENV=<your-virtual-env-name>вы можете, конечно, расширить свои крючки со всем, что вы найдете полезным в терминальной среде вашего конкретного проекта PyCharm.
для виртуальных сред conda в Windows убедитесь, что ваш пакетный файл не имеет имени
activate.batтак как это вызовет конфликт с condaactivateкоманда, приводящая к рекурсивному вызову пакетного файла.что работает для меня это следующий путь оболочки:
"cmd.exe" /k ""C:\FullPathToYourProject\activate-env.bat""и в активе-env.bat-файла:
call activate myenvname
Я хотел отдельную виртуальную среду для каждого проекта, и не очень заботился о том, чтобы иметь дополнительные файлы для облегчения этого. Решение, которое вам нужно сделать только один раз и работает для всех проектов, затем добавляет следующее к вашему
.bashrcили.bash_profile:if [ -d "./venv" ]; then source ./venv/bin/activate fiэто проверяет, есть ли виртуальная среда, в которой открывается терминал, и если да, то активирует его (и, конечно, могут использоваться другие относительные пути). Настройки терминала PyCharm можно оставить как свои по умолчанию.
PyCharm 4.5.4
создайте файл .pycharmrc в вашей домашней папке со следующим содержание
source ~/.bashrc source ~/pycharmvenv/bin/activateиспользование пути virtualenv в качестве последнего параметра.
затем установите параметры оболочки - > настройки проекта - > Путь оболочки к
/bin/bash --rcfile ~/.pycharmrcЯ не знаю почему, но это не работает для меня. PyCharm выводит сообщение об ошибке.
cmd.exe /K "<path-to-your-activate.bat>"Он работает, но он создает один и тот же virtualenv для каждого проекта, и даже если в этом нет необходимости.этой квитанция работает! Но строка
/env_yourenvlocate/scripts/activate.batдолжны содержать кавычки, как это"Full_path_to_your_env_locate\scripts\activate.bat"!деактивировать virtualenv очень просто-наберите в терминале 'деактивировать'
(virt_env) D:\Projects\src>deactivate D:\Projects\src>
решение для WSL (Ubuntu на Windows)
если вы используете WSL (Ubuntu на Windows), вы также можете открыть bash как терминал в pycharm и активировать Linux virtualenv.
использовать
.pycharmrcфайл, как описано в ответе Питера Гибсона; добавить.pycharmrcфайл в домашнюю директорию со следующим содержимым:source ~/.bashrc source ~/path_to_virtualenv/bin/activateВ Pycharm Файл > Настройки > Инструменты > Терминал добавьте следующую раковину путь':
"C:/Windows/system32/bash.exe" -c "bash --rcfile ~/.pycharmrc"
проект конкретного virtualenvпуть к вашему virtualenv в
.pycharmrcне должен быть абсолютным. Вы можете установить проект конкретного virtualenv, установив относительный путь из каталога проекта. Мой virtualenv всегда находится в папке "venv" в каталоге моего проекта, поэтому мой.pycharmrcфайл выглядит так:source ~/.bashrcsource ~/pycharmvenv/bin/activate#absolute path source ./venv/bin/activate #relative path
бонус: автоматически открыть ssh туннель для подключения virtualenv как интерпретатор проектадобавить следующий код
.pycharmrcfile:if [ $(ps -aux | grep -c 'ssh') -lt 2 ]; then sudo service ssh start fiэто проверяет, если SSH туннель уже открыт, и открывает один в противном случае. В Файл - > Настройки - > Проект - > Интерпретатор Проекта в Pycharm добавьте новый удаленный интерпретатор со следующей конфигурацией:
+--------------------------+---------------------------------+-------+----+ | Name: | <Interpreter name> | | | | Select | 'SSH Credentials' | | | | Host: | 127.0.0.1 | Port: | 22 | | User: | <Linux username> | | | | Auth type: | 'Password' | | | | Password: | <Linux password> | | | | Python interpreter path: | <Linux path to your virtualenv> | | | | Python helpers path: | <Set automatically> | | | +--------------------------+---------------------------------+-------+----+теперь, когда вы открываете свой проект, ваш bash автоматически запускается в вашем virtualenv, открывает ssh-туннель и pycharm соединяет виртуальное окружение в качестве удаленного переводчика.
предупреждение: последнее обновление в Windows автоматически запускает службу SshBroker и SshProxy при запуске. Они блокируют SSH-туннель от linux до windows. Вы можете остановить эти службы в Диспетчере задач -> службы, после чего все будет работать снова.




Comments