it-swarm.com.ru

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

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

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

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

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

88
Chris Cogdon

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

Согласно 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

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

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

/bin/bash --rcfile ~/.pycharmrc
87
Peter Gibson

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

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

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

Обновление:

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

37
PrivateUser22

Для пользователей 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""

36
SaeX

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

  • Восстанавливает поведение логина Shell. 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
7
Chris Cogdon

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

Подробнее здесь.

6
pferate

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

#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
6
user1928626

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

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

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

 The Gear!

3
AmiNadimi

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

source ~/.bashrc
projectdir=${PWD##*/}
source ~/.virtualenvs/$projectdir/bin/activate
2
user4304103

В ответ на ответ Питера Здесь Mac-версия файла .pycharmrc:

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

Курицы

2
Hendrik Strobelt

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

 image

2
WQY

вот что я делаю: создаю файл activ_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
phiree

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

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

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

C:\python27 \;
C:\python27\Lib\сайт-пакеты\пип \;
C:\python27\Scripts;
C:\python27\Lib\сайт-пакеты\Django\Bin;

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

C: [project_path]\virtualenv-Py2.7_Dj1.7\Lib\сайт-пакеты\пип;
[. .____] С: [project_path]\virtualenvs\virtualenv-Py2.7_Dj1.7\Сценарии;
C: [project_path]\virtualenvs\virtualenv-Py2.7_Dj1.7\Lib\сайт-пакеты\Django\Bin;

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

1
user2684827

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

1
Koblikov Mihail

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

1
M3RS

Решение для 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 ~/.bashrc 
источник ~/pycharmvenv/bin/activ  #absolute path 
 source ./venv/bin/activate #relative path 


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

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

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

Это проверяет, открыт ли туннель ssh, и открывает его в противном случае . В File -> Settings -> Project -> Project Interpreter в Pycharm, добавьте новый удаленный интерпретатор со следующей конфигурацией:

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

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

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

0
Robbe

Другой альтернативой является использование virtualenvwrapper для управления виртуальными средами. Похоже, что после активации virtualenvwrapper script pycharm может использовать его, и тогда простая команда workon будет доступна из консоли pycharm и предоставит вам доступные виртуальные среды:

[email protected]:~/Development/Django-tutorial$ workon
Django-tutorial
FlaskHF
SQLAlchemy
themarkdownapp
[email protected]:~/Development/Django-tutorial$ workon Django-tutorial
(Django-tutorial)[email protected]:~/Development/Django-tutorial$ 
0
ksaylor11

Одна опция у вас есть, когда вы вводите терминал> Run> Debug> Edit Configurations  enter image description here

 enter image description here

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

0
johndpope

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>
0
Oleg Novikov

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

Ты пишешь:

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

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

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

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

0
tilusnet

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

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

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

0
golmschenk

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

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

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

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

call activate myenvname
0
Erwin Mayer