Як активувати 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 року) підтримує термінали поза коробкою.

Авто virtualenv підтримується для bash, zsh, fish та Windows cmd. Ви можете налаштувати свої параметри оболонки в Налаштуваннях (Налаштування) | Інструменти | Термінал.


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

Створіть .pycharmrcу домашній папці файл із наступним вмістом

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

Використання вашого шляху virtualenv в якості останнього параметра.

Потім встановіть Параметри оболонки-> Налаштування проекту-> Шлях оболонки до

/bin/bash --rcfile ~/.pycharmrc

9
Дякую! Я не думав переосмислити rc-файл оболонки. Для кращої підтримки pycharm, що працює з декількома проектами, кожен з яких може мати різний virtualenv, я б назвав файл ".pycharmrc" дещо іншим, і, можливо, помістив би його в сам каталог env. ~/pycharmenv/bin/terminalactivateзвучить як хороший варіант.
Кріс Когдон

1
Pycharm 4 має віртуальні вбудовані в IDE. Дивіться мою відповідь для отримання додаткової інформації.
pferate

1
@PeterGibson, відповідь pferate не має нічого спільного з питанням ОП. Проблема в тому, що термінал не є інтерпретатором Python. Інтеграція venv знайшла шлях до PyCharm 4. Хоча ваша відповідь працює.
Норберт

1
Це найпростіше рішення, за винятком того, що я розміщую їх .pycharmrcу домашній папці проекту, щоб я міг мати різний файл для кожного проекту. У правильно налаштованому проекті не потрібно вказувати абсолютний шлях до .pycharmrcфайлу.
чакраварти

1
@SiminJie, PyCharm 2016.3.2 має такий варіант із поля. Перейдіть до: налаштування -> Інструменти -> Термінал. І переконайтеся, що опція «Активувати virtualenv» включена.
ренський

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""



40

Для користувачів Windows під час використання PyCharm та віртуального середовища під Windows, ви можете використовувати параметр / k для cmd.exe для автоматичного встановлення віртуального середовища.

Перейдіть у Налаштування, Термінал, оболонка за замовчуванням та додайте /K <path-to-your-activate.bat>.

У мене немає репутації коментувати попередню відповідь, тому розміщую цю виправлену версію. Це дійсно економить багато часу.

Оновлення:

Примітка: Pycharm тепер підтримує віртуальне середовище безпосередньо, і, здається, працює добре для мене, тому моє вирішення проблем більше не потрібно.


Це чудово, але лише тоді, коли у вас є лише один віртуаленв для всіх ваших проектів. Налаштування оболонки за замовчуванням поділяються між проектами
MartinM

7

Спираючись на відповіді Петра та експерименти, я придумав хороше «загальне рішення», яке вирішує наступне:

  • Відновлює поведінку оболонки для входу. PyCharm зазвичай виконує оболонку входу, але --rcfile зупинив це. Сценарій як і раніше використовує --rcfile, але намагається імітувати поведінку INVOCATION оболонки входу.
  • Вилучає необхідність створення rcfile для кожного середовища
  • Усуває необхідність оновлення налаштувань проекту, якщо ви змінюєте середовище.

Скиньте цей скрипт кудись у каталог сміття. Наприклад, ~ / 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

Потім встановіть шлях Shell PyCharm до:

/bin/bash --rcfile ~/bin/pycharmactivate

1
СПАСИБІ! Це спрацювало для мене через години невдалих спроб з'ясувати, з чого почати bashrc та bash-профілі. Однак він кинув і помилився, що не міг знайти мою віртуальну програму, тому я змінив її так, чи можете ви сказати мені, чи все в порядку? 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: Ваш сценарій буде добре працювати, але він зафіксований у вашому virtualenv "project1". Наведений вище сценарій повинен був зробити автоматичне виявлення, але існує купа припущень: що початковий робочий каталог - це розташування каталогу ".idea"; що формат файлу Workspace.xml істотно не змінюється. На жаль, схоже, що версія піхарми 5 внесла значні зміни в цій галузі. Зараз я не можу зрозуміти, де дані.
Кріс Когдон

добре, я не проти змінити своє доповнення залежно від проекту, оскільки Шлях до оболонки також є специфічним для проекту. Я міг отримати лише підказку "bash 3,2 $:" перед тим, як знайти ваш сценарій, без вказівки на мою поточну папку або схожість мого терміналу. Ще раз дякую вам!
нульовий знак

7

PyCharm 4 тепер має віртуальні інтеграції в IDE. Вибираючи інтерпретатора свого проекту, ви можете створювати, додавати або вибирати virtualenv. Вони додали "консоль Python", яка працює в налаштованому інтерпретаторі проекту.

Більше інформації тут.


11
Як це відповідає ОП? Ще доведеться 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" перед цим сценарієм.
Рафаель Гомес

5

Я переглянув усі відповіді вище, але жодна з них не є для мене досить елегантною. У Pycharm 2017.1.3 (на моєму комп’ютері) найпростіший спосіб - це відкрити Settings->Tools->Terminalі перевірити Shell integrationі Activate virtualenvпараметри.

зображення


Ну, прийнята відповідь цитує це саме те саме. Це просто те, що вона не має картини.
Вікас Прасад

5

Якщо ви використовуєте версію Windows, це досить просто. Якщо у вас вже є віртуальне середовище, просто перейдіть до його папки, знайдіть activate.batвнутрішню Scriptsпапку. скопіюйте повний шлях і вставте його в термінал pycharm, потім натисніть Enterі все закінчено!

Якщо вам потрібно створити нове віртуальне середовище:

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

Шестірня!


Чудова відповідь! Дякую! Швидке запитання. У мене є 3 різних віртуальних середовища, які я створив в Анаконда. Чи є окремі activate.batдля кожного з них?
користувач1700890

1
@ user1700890 так! Якщо ви не перезаписали середовища, вони повинні мати окремі папки і, як результат, окремі activate.batфайли. якщо вам подобається відповідь, сміливо подайте заявку;)
AmiNadimi

Дякую, я щойно перевірив, у Scriptsпапці немає папок . Також Pycharm скаржиться, що activate.batне є дійсним SDK пітона
користувач1700890

1
Тому я думаю, вам слід спершу спробувати знайти папку віртуального середовища, створену, коли ви використовуєте Anaconda, а потім запустити activateпакетний файл всередині неї. або якщо це можливо для вас, просто займіться створенням нового середовища.
AmiNadimi

3

На Mac це PyCharm => Налаштування ... => Інструменти => Термінал => Активувати virtualenv , який повинен бути включений за замовчуванням.


2

Я щойно додав сценарій на ім’я pycharmactivate у свій домашній каталог. Встановити значення файлу PyCharm (4.0.1)> Налаштування> Інструменти> Термінал> Шлях до оболонки до / bin / bash --rcfile ~ / pycharmactivate. Можливо, не найкраще рішення, якщо у вас є різні каталоги / назви проектів та virtualenv, але це працює для мене. Цей сценарій містить наступні 3 рядки і припускає, що ваш virtualenv має те саме ім’я, що і ваш проект проекту.

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

2

Слідкуючи за відповіддю Петра, ось версія Mac для .pycharmrcфайлу:

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

Курка


1

У мене є рішення, яке працювало на моїй машині Windows 7.

Я вважаю, що термінал PyCharm - це результат його запуску cmd.exe, який буде завантажувати PATHзмінну Windows , і використовувати версію Python, яку вона знайде першою в цьому PATH. Для редагування цієї змінної, клацніть правою кнопкою миші Мій комп'ютер -> Властивості -> Додаткові параметри системи -> Advanced вкладка -> Змінні середовища ... кнопка. У розділі Системні змінні виберіть та відредагуйте PATHзмінну.

Ось відповідна частина мого PATH перед редагуванням:

C: \ Python27 \;
C: \ Python27 \ Lib \ site-пакети \ pip \;
C: \ Python27 \ Scripts;
C: \ Python27 \ Lib \ site-пакети \ django \ bin;

... і після редагування PATH(зараз лише 3 рядки):

C: [project_path] \ virtualenv-Py2.7_Dj1.7 \ Lib \ site-пакети \ pip;
C: [project_path] \ virtualenvs \ virtualenv-Py2.7_Dj1.7 \ Scripts;
C: [project_path] \ virtualenvs \ virtualenv-Py2.7_Dj1.7 \ Lib \ site-пакети \ django \ bin;

Щоб перевірити це, відкрийте новий термінал Windows ( Пуск -> введіть cmdта натисніть Enter) і подивіться, чи використовується у вашому віртуальному середовищі. Якщо це працює, перезапустіть PyCharm, а потім протестуйте його в терміналі PyCharm.


1

це те, що я роблю: створіть файл activate_env.bat (windows, можливо .sh в Linux) у вихідному коді:

/env_yourenvlocate/scripts/activate.bat

та інший файл enabletivate_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

Якщо ви перемістили проект в інший каталог, ви можете встановити новий шлях через діалогове вікно налаштувань. А потім вам потрібно встановити цей Інтерпретатор проекту в діалоговому вікні «Редагування конфігурації».

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

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


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$ 

1
Однак це вимагає від мене активувати сценарій роботи кожного разу, коли я відкриваю термінал, і знати, яку піхарму віртуального середовища в даний час використовує для запуску програми, якої я явно намагався уникнути.
Кріс Когдон

@ChrisCogdon ах, бачу
ksaylor11

0

Цей метод повинен працювати з довільними віртуальними середовищами для кожного проекту, і він не робить припущень щодо вашого середовища, оскільки він використовує створені гачки.

Ви пишете:

  • Глобальний сценарій, який викликає гачок
  • Сценарій гачка для проекту 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

У віртуальних середовищах 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 можна залишити за замовчуванням.


0

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>" Це працює, але це створює однакові віртуальні для кожного проекту, і навіть якщо це не потрібно.

Ця квитанція працює! Але рядок /env_yourenvlocate/scripts/activate.batповинен містити лапки, як це "Full_path_to_your_env_locate\scripts\activate.bat"!

Деактивувати virtualenv дуже просто - наберіть термінал «деактивувати»

(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 > Налаштування> Інструменти> Термінал додайте наступний 'Шлях до оболонки':

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


Віртуальнв конкретного проекту

Шлях до вашої віртуолви в .pycharmrcне повинен бути абсолютним. Ви можете встановити конкретний проект virtualenv, встановивши відносний шлях від каталогу проектів. Мій virtualenv завжди знаходиться в папці 'venv' під моїм каталогом проектів, тому мій .pycharmrcфайл виглядає приблизно так:

source ~ / .bashrc
 source ~ / pycharmvenv / bin / activate #absolute path
джерело ./venv/bin/activate # відносний шлях


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

Додайте у .pycharmrcфайл наступне :

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

Це перевіряє, чи не відкрито ssh-тунель, а відкриває його інакше. У меню Файл -> Налаштування -> Проект -> Інтерпретатор проекту в Pycharm, додайте новий віддалений перекладач із наступною конфігурацією:

+ -------------------------- + ---------------------- ----------- + ------- + ---- +
| Назва: | <Назва перекладача> | | |
| Виберіть | 'SSH Credentials' | | |
| Ведучий: | 127.0.0.1 | Порт: | 22 |
| Користувач: | <Ім’я користувача Linux> | | |
| Тип аутентичності: | 'Пароль' | | |
| Пароль: | <Пароль Linux> | | |
| Шлях інтерпретатора Python: | <Шлях Linux до вашого virtualenv> | | |
| Шлях помічників Python: | <Встановити автоматично> | | |
+ -------------------------- + ---------------------- ----------- + ------- + ---- +

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

попередження: останнє оновлення в Windows автоматично запускає службу SshBroker та SshProxy. Вони блокують ssh-тунель від Linux до windows. Ви можете зупинити ці служби в диспетчері завдань -> Послуги, після чого все знову запрацює.


0

Один варіант у вас є, коли ви входите в термінал> Виконати> Налагодження> Редагувати конфігурації введіть тут опис зображення

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

виберіть відповідний conda environmentmnent .. Також під час створення нового проекту він вимагає налаштувати це місце.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.