Как активировать virtualenv внутри терминала PyCharm?

110

Я установил PyCharm, создал свой virtualenv (либо с помощью команды virtual env, либо непосредственно в PyCharm) и активировал эту среду в качестве своего интерпретатора. Все работает нормально.

Однако, если я открываю терминал с помощью «Инструменты, открыть терминал», в приглашении оболочки не используется виртуальный env; Мне все еще нужно использовать source ~/envs/someenv/bin/activateэтот терминал, чтобы активировать его.

Другой способ - активировать среду в оболочке и запустить PyCharm из этой среды. Это «работоспособно», но довольно некрасиво и означает, что у меня возникают серьезные проблемы, если я переключаю среду или проекты с PyCharm: теперь я использую совершенно неправильную среду.

Есть ли другой, гораздо более простой способ, чтобы «Инструменты, открытый терминал» автоматически активировали виртуальную среду?

Крис Когдон
источник

Ответы:

95

Редактировать:

Согласно https://www.jetbrains.com/pycharm/whatsnew/#v2016-3-venv-in-terminal , PyCharm 2016.3 (выпущен в ноябре 2016 г.) имеет поддержку virutalenv для терминалов из коробки.

Auto virtualenv поддерживается для bash, zsh, fish и Windows cmd. Вы можете настроить свою оболочку в настройках (Предпочтения) | Инструменты | Терминал.


Старый метод:

Создайте .pycharmrcв домашней папке файл со следующим содержимым

source ~/.bashrc
source ~/pycharmvenv/bin/activate

Использование вашего виртуального пути в качестве последнего параметра.

Затем установите настройки оболочки-> Настройки проекта-> Путь к оболочке

/bin/bash --rcfile ~/.pycharmrc
Питер Гибсон
источник
9
Спасибо! Я не думал о замене rc-файла оболочки. Чтобы лучше поддерживать работу pycharm с несколькими проектами, каждый из которых может иметь свой virtualenv, я бы назвал файл «.pycharmrc» по-другому и, возможно, поместил бы его в сам каталог env. ~/pycharmenv/bin/terminalactivateзвучит как хороший вариант.
Крис Когдон
1
Pycharm 4 имеет virtualenvs, интегрированные в IDE. См. Мой ответ для получения дополнительной информации.
pferate
1
@PeterGibson, ответ pferate не имеет ничего общего с вопросом OP. Проблема в терминале, а не в интерпретаторе Python. Интеграция venv существовала задолго до PyCharm 4. Однако ваш ответ работает.
Норберт
1
Это простейшее решение, за исключением того, что я помещаю свой .pycharmrcфайл в домашнюю папку проекта, чтобы у меня был отдельный файл для каждого проекта. В правильно настроенном проекте нет необходимости указывать абсолютный путь к .pycharmrcфайлу.
tchakravarty
1
@SiminJie, PyCharm 2016.3.2 имеет такую ​​опцию из коробки. Зайдите в: настройки -> Инструменты -> Терминал. И убедитесь, что опция «Активировать virtualenv» включена.
ренский 06
45

Обновить:

Предпочтения в Настройках (Предпочтения) | Инструменты | Терминал глобальный.
Если вы используете venv для каждого проекта, не забудьте использовать текущую переменную пути и имя venv по умолчанию:

"cmd.exe" /k ""%CD%\venv\Scripts\activate"" 

Для пользователей Windows: при использовании PyCharm с виртуальной средой вы можете использовать /Kпараметр для 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и добавить (ум кавычки). Также добавьте кавычки вокруг cmd.exe, в результате получится:

"cmd.exe" /k ""C:\mypath\my-venv\Scripts\activate.bat""

SaeX
источник
В данном случае %CD%это текущий рабочий каталог, см. Команду оболочки Windows, чтобы получить полный путь к текущему каталогу?
bad_coder
40

Пользователи Windows, использующие PyCharm и виртуальную среду под Windows, могут использовать параметр / k для cmd.exe для автоматической установки виртуальной среды.

Зайдите в Настройки, Терминал, Оболочка по умолчанию и добавьте /K <path-to-your-activate.bat>.

У меня нет репутации, чтобы комментировать предыдущий ответ, поэтому размещаю исправленную версию. Это действительно экономит много времени.

Обновить:

Примечание: Pycharm теперь поддерживает виртуальные среды напрямую, и мне кажется, что это хорошо работает для меня, поэтому мой обходной путь больше не нужен.


источник
Это замечательно, но только когда у вас есть только один виртуальный сервер для всех ваших проектов. Настройки оболочки по умолчанию используются во всех проектах
MartinM
7

На основе ответов Питера и экспериментов я нашел хорошее «общее решение», которое решает следующие проблемы:

  • Восстанавливает поведение оболочки входа. PyCharm обычно запускает оболочку входа в систему, но --rcfile остановил это. Сценарий по-прежнему использует --rcfile, но пытается имитировать поведение INVOCATION оболочки входа.
  • Устраняет необходимость создавать 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
Крис Когдон
источник
1
СПАСИБО! Это сработало для меня после нескольких часов безуспешных попыток выяснить, где запустить профили bashrc и bash. Однако он выбросил и ошибку, что не смог найти мой виртуальный env, поэтому я изменил его так, вы можете сказать мне, в порядке ли? 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 source ~/learnp/project1/venv/bin/activate
zerohedge
@zerohedge: ваш скрипт будет работать нормально, но он исправлен для вашего виртуального "project1". Приведенный выше сценарий должен был выполнять автоматическое обнаружение, но было сделано несколько предположений: что исходный рабочий каталог является местоположением каталога ".idea"; что формат файла workspace.xml существенно не изменится. К сожалению, похоже, что версия 5 pycharm внесла значительные изменения в эту область. Я не могу понять, где сейчас данные.
Крис Когдон
ну, я не против изменить свое дополнение в зависимости от проекта, поскольку путь к оболочке также зависит от проекта. Я мог получить только подсказку с надписью «bash 3.2 $:» до того, как нашел ваш скрипт, без указания моего текущего каталога или какого-либо сходства с моей подсказкой терминала. Еще раз спасибо!
zerohedge
7

PyCharm 4 теперь имеет virtualenvs, интегрированные в IDE. При выборе интерпретатора проекта вы можете создать, добавить или выбрать файл virtualenv. Они добавили «Консоль Python», которая работает в настроенном интерпретаторе проекта.

Больше информации здесь.

pferate
источник
11
Как это отвечает OP? Еще придется source /path/to/venv/bin/activateвручную в терминале.
frnhr
6

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

#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

источник
Спасибо, у меня это сработало! Однако пришлось сделать еще две вещи. 1) Добавьте source /etc/profileв начало файла ~ / .pycharmrc (на Mac Yosemite) 2) В Pycharm отредактируйте Настройки> Инструменты> Терминал> Путь к оболочке до "/ bin / bash --rcfile ~ / .pycharmrc"
frnhr
Это здорово, спасибо! Если вы используете Python 3, не забудьте заключить скобки для функции печати. Мне самому пришлось поставить перед этим скриптом "export ~ / .bashrc".
Raphaël Gomès,
5

Я просмотрел все ответы выше, но ни один из них не кажется мне достаточно элегантным. В Pycharm 2017.1.3 (на моем компьютере) самый простой способ - открыть Settings->Tools->Terminalи проверить Shell integrationи Activate virtualenvпараметры.

образ

WQY
источник
В принятом ответе цитируется то же самое. Просто у него нет изображения.
Vikas Prasad
5

Если вы используете версию для Windows, это довольно просто. Если у вас уже есть виртуальная среда, просто перейдите в ее папку и найдите ее activate.batвнутри Scripts. скопируйте его полный путь и вставьте в терминал pycharm, затем нажмите, Enterи все готово!

Если вам нужно создать новую виртуальную среду:

Перейдите в файлы> настройки, затем найдите project interpreter, откройте его, нажмите кнопку с шестеренкой и создайте среду, где хотите, а затем следуйте первому абзацу.

Механизм!

АмиНадими
источник
Отличный ответ! Спасибо! Быстрый вопрос. У меня есть 3 разных виртуальных среды, которые я создал в Anaconda. Есть ли отдельный activate.batдля каждого из них?
user1700890
1
@ user1700890 да! Если вы не перезаписывали среды, они должны иметь отдельные папки и, как следствие, отдельные activate.batфайлы. если вам нравится ответ, не стесняйтесь голосовать;)
AmiNadimi
Спасибо, только что проверил, папок в Scriptsпапке нет. Также Pycharm жалуется, что activate.batэто недопустимый SDK для python
user1700890
1
Поэтому я думаю, вам следует сначала попытаться найти папку виртуальной среды, созданную при использовании Anaconda, а затем запустить activateвнутри нее командный файл. или, если это возможно, просто создайте новую среду.
AmiNadimi
3

На Mac это PyCharm => Настройки ... => Инструменты => Терминал => Активировать virtualenv , который должен быть включен по умолчанию.

M3RS
источник
2

Я только что добавил скрипт с именем pycharmactivate в свой домашний каталог. Установите значение PyCharm (4.0.1) Файл> Настройки> Инструменты> Терминал> Путь к оболочке в / bin / bash --rcfile ~ / pycharmactivate. Возможно, это не лучшее решение, если у вас разные каталоги / имена проектов и virtualenv, но оно работает для меня. Этот сценарий содержит следующие 3 строки и предполагает, что ваш virtualenv имеет то же имя, что и каталог вашего проекта.

source ~/.bashrc
projectdir=${PWD##*/}
source ~/.virtualenvs/$projectdir/bin/activate
user4304103
источник
2

Следуя ответу Питера, вот версия .pycharmrcфайла для Mac :

source /etc/profile
source ~/.bash_profile
source  <venv_dir>/bin/activate

Курица

Хендрик Штробельт
источник
1

У меня есть решение, которое сработало на моей машине с Windows 7.

Я считаю, что терминал PyCharm является результатом его работы cmd.exe, который загружает PATHпеременную Windows и использует ту версию Python, которую он находит первой в ней PATH. Чтобы изменить эту переменную, щелкните правой кнопкой мыши « Мой компьютер» -> « Свойства» -> « Дополнительные параметры системы» -> вкладка « Дополнительно » -> « Переменные среды» . В разделе Системные переменные выберите и отредактируйте PATHпеременную.

Вот соответствующая часть моего PATH перед редактированием:

C: \ Python27 \;
C: \ Python27 \ Lib \ site-packages \ pip \;
C: \ Python27 \ Scripts;
C: \ Python27 \ Lib \ сайт-пакеты \ django \ bin;

... и после редактирования PATH(сейчас всего 3 строки):

C: [путь_проекта] \ virtualenv-Py2.7_Dj1.7 \ Lib \ site-packages \ pip;
C: [путь_проекта] \ virtualenvs \ virtualenv-Py2.7_Dj1.7 \ Scripts;
C: [путь_проекта] \ virtualenvs \ virtualenv-Py2.7_Dj1.7 \ Lib \ site-packages \ django \ bin;

Чтобы проверить это, откройте новый терминал Windows ( Пуск -> введите cmdи нажмите Enter) и посмотрите, использует ли он вашу виртуальную среду. Если это сработает , перезапустите PyCharm, а затем проверьте его в терминале PyCharm.

user2684827
источник
1

вот что я делаю: создайте файл activate_env.bat (windows, возможно .sh в linux) в папке с исходным кодом:

/env_yourenvlocate/scripts/activate.bat

и еще один файл deactivate_env.bat:

/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>
фири
источник
1

Если у вас Pycharm 2016.1.4v и выше, вы должны использовать "default path" /K "<path-to-your-activate.bat>" кавычки не забывайте

Кобликов Михаил
источник
1

Если вы переместили свой проект в другой каталог, вы можете установить новый путь через диалог настроек. Затем вам нужно установить этот Project Interpreter в диалоговом окне Edit Configuration.

введите описание изображения здесь

введите описание изображения здесь

Хачатур
источник
0

Другой альтернативой является использование 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$ 
ksaylor11
источник
1
Однако для этого мне нужно активировать скрипт workon каждый раз, когда я открываю терминал, и я должен знать, какую виртуальную среду pycharm в настоящее время использует для запуска программы, чего я явно пытался избежать.
Крис Когдон,
@ChrisCogdon а, я понимаю
ksaylor11
0

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

Ты пишешь:

  • Глобальный сценарий, вызывающий ловушку
  • Скрипт ловушки для каждого проекта PyCharm (не обязательно)

Учитывая, что текущая последняя версия PyCharm (Сообщество 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 «Инструменты -> Терминал -> Путь к оболочке» для вызова этого скрипта, например: /bin/bash --rcfile ~/.pycharmrc

Наконец, для каждого проекта PyCharm вам необходимо активировать определенную виртуальную среду, создайте файл в корне проекта PyCharm. .pycharm/term-activate . Это ваш крючок, и он просто определит имя желаемой виртуальной среды для вашего проекта PyCharm:

export PYCHARM_VENV=<your-virtual-env-name>

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

тилуснет
источник
0

Для виртуальных сред conda в Windows убедитесь, что ваш командный файл НЕ назван, activate.batпоскольку это вызовет конфликт с командой conda activate, что приведет к рекурсивному вызову командного файла.

Для меня работает следующий путь к оболочке:

"cmd.exe" /k ""C:\FullPathToYourProject\activate-env.bat""

И в файле activate-env.bat:

call activate myenvname
Эрвин Майер
источник
0

Мне нужна была отдельная виртуальная среда для каждого проекта, и мне было наплевать, чтобы для этого были дополнительные файлы. Решение, которое вам нужно сделать только один раз и которое работает для всех проектов, заключается в добавлении следующего в ваш .bashrcили .bash_profile:

if [ -d "./venv" ]; then
    source ./venv/bin/activate
fi

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

Golmschenk
источник
0

PyCharm 4.5.4

Создайте файл .pycharmrc в своей домашней папке со следующим содержимым

source ~/.bashrc
source ~/pycharmvenv/bin/activate

Использование вашего виртуального пути в качестве последнего параметра.

Затем установите настройки оболочки-> Настройки проекта-> Путь к оболочке

/bin/bash --rcfile ~/.pycharmrc

Не знаю почему, но у меня это не работает. PyCharm выводит ошибку.

cmd.exe /K "<path-to-your-activate.bat>" Он работает, но создает одинаковые виртуальные серверы для каждого проекта, даже если в этом нет необходимости.

Эта квитанция рабочая! Но строка /env_yourenvlocate/scripts/activate.batдолжна содержать кавычки, как это"Full_path_to_your_env_locate\scripts\activate.bat" !

Деактивировать virtualenv очень просто - наберите в терминале deactivate

(virt_env) D:\Projects\src>deactivate
D:\Projects\src>
Олег Новиков
источник
«Не знаю почему, но у меня это не работает» - может быть, потому, что это решение подходит для linux / mac, а не для Windows? ;)
Нир Альфаси
0

Решение для WSL (Ubuntu в Windows)

Если вы используете WSL (Ubuntu в Windows), вы также можете открыть bash в качестве терминала в pycharm и активировать linux virtualenv.

Используйте .pycharmrcфайл, как описано в ответе Питера Гибсона; Добавьте .pycharmrcфайл в свой домашний каталог со следующим содержимым:

source ~/.bashrc
source ~/path_to_virtualenv/bin/activate

В Pycharm File> Settings> Tools> Terminal добавьте следующий «Путь к оболочке»:

"C:/Windows/system32/bash.exe" -c "bash --rcfile ~/.pycharmrc"


Виртуальный проект для конкретного проекта

Путь к вашему virtualenv .pycharmrcне обязательно должен быть абсолютным. Вы можете установить virtualenv для конкретного проекта, указав относительный путь из каталога вашего проекта. Мой virtualenv всегда находится в папке venv в каталоге моего проекта, поэтому мой .pycharmrcфайл выглядит так:

источник ~ / .bashrc
 источник ~ / pycharmvenv / bin / активировать абсолютный путь
источник ./venv/bin/activate #relative path


БОНУС: автоматически открывать туннель ssh для подключения virtualenv в качестве интерпретатора проекта

Добавьте в свой .pycharmrcфайл следующее:

if [ $(ps -aux | grep -c 'ssh') -lt 2 ]; then
    sudo service ssh start 
fi

Это проверяет, открыт ли уже туннель ssh, и открывает его в противном случае. В Файл -> Настройки -> Проект -> Интерпретатор проекта в Pycharm добавьте новый удаленный интерпретатор со следующей конфигурацией:

+ -------------------------- + ---------------------- ----------- + ------- + ---- +
| Имя: | <Имя переводчика> | | |
| Выбрать | «Учетные данные SSH» | | |
| Хост: | 127.0.0.1 | Порт: | 22 |
| Пользователь: | <Имя пользователя Linux> | | |
| Тип аутентификации: | «Пароль» | | |
| Пароль: | <Пароль Linux> | | |
| Путь к интерпретатору Python: | <Путь к вашей виртуальной машине в Linux> | | |
| Путь к помощникам Python: | <Установить автоматически> | | |
+ -------------------------- + ---------------------- ----------- + ------- + ---- +

Теперь, когда вы открываете свой проект, ваш bash автоматически запускается в вашем virtualenv, открывает туннель ssh, а pycharm подключает virtualenv как удаленный интерпретатор.

предупреждение: последнее обновление в Windows автоматически запускает службу SshBroker и SshProxy при запуске. Они блокируют туннель ssh от linux до windows. Вы можете остановить эти службы в Диспетчере задач -> Службы, после чего все снова заработает.

Робби
источник
0

Один из вариантов, который у вас есть, когда вы входите в терминал> Run> Debug> Edit Configurations введите описание изображения здесь

введите описание изображения здесь

выберите соответствующую среду conda. Также, когда вы создаете новый проект - он просит настроить это место.

Джонпоп
источник