Окружение Pycharm отличается от командной строки

У меня возникла проблема с тем, чтобы моя среда Pycharm соответствовала среде, которая у меня есть в командной строке. Недавно я удалил python и переустановил его через home brew. Питон в моем пути указывает на /usr/local/bin/python. Я добавил PATH=/usr/local/bin:$PATH в начало моего файла .bash_profile, и я могу выполнить следующий код, очень тонкий в interperter в командной строке. Однако, когда я добавляю /usr/local/bin/python к интерпретаторам python проекта и запускаю код ниже, я получаю ошибку атрибута. Может ли кто-нибудь пролить свет на то, как я могу заставить Pycharm использовать ту же среду, что и моя командная строка?

import sqlite3
db = "mydb.db"
conn = sqlite3.connect(db)
conn.enable_load_extension(True)

AttributeError: объект sqlite3.Connection не имеет атрибута enable_load_extension '

Ответы

Ответ 1

.bash_profile считывается только bash (только для интерпретатора командной строки). Однако, если вы хотите сохранить среду bash для PyCharm, есть один true Linux.

Запустите PyCharm из командной строки (из bash). Таким образом, переменные окружения будут наследоваться от bash до pycharm. Прочтите $man environ для получения информации о процессе наследования среды Linux. Так что вам нужно всего лишь запустить ${PATH_TO_PYCHARM}/bin/pycharm.sh из командной строки. Или создайте пусковую установку, которая вызывает bash для запуска PyCharm.

Вот оно! Надеюсь, что это сработает для вас.

Ответ 2

Если вы используете PyCharm версии 2016.3 и заметили, что ваш терминал PyCharm больше не предоставляет ту же среду по умолчанию, что и ваша среда MacOS Terminal, это который должен быть исправлен в 2016.3.1 - всякий раз, когда он выпускается. В то же время следующее обходное решение, которое должно "по умолчанию" для всех ваших проектов PyCharm возвращать более новый MacOS-терминал, такой как PyCharm-Terminal:

Создайте файл ~/.bashrc со следующим содержимым: source /etc/bashrc source /etc/bashrc_Apple_Terminal source ~/.bash_profile

Это должно настроить ваш PyCharm Terminal (интерактивный сеанс bash) и сделать его похожим на терминал MacOS (сеанс входа bash). Когда JetBrains исправляет и выпускает 2016.3.1, я рекомендую удалить этот ~/.bashrc файл. Надеюсь, это вернет нас к нормальной жизни.

Ответ 3

Другой подход заключается в том, чтобы указать ваши переменные окружения script (например, .bash_profile), добавив строку . /path/to/script в PY_CHARM_INSTALL_DIR/bin/pycharm.sh.

После этого вы можете запустить pycharm, используя быстрый обед или что-то еще, и вы будете там переменными.

Ответ 4

К сожалению, в Mac OS X графические приложения не наследуют вашу конфигурацию .bash_profile. Я отправляю обновленное обходное решение для OSX 10.11 о том, как настроить переменные среды на уровне GUI:

Существует полезный репо, называемый osx-env-sync, который читает ~/.bash_profile и устанавливает экспортированные в него переменные среды для приложений GUI. После копирования 2 файлов и выполнения двух других команд, описанных на странице github, Pycharm можно запустить с быстрым запуском с использованием глобальных переменных, как определено в файле bash_profile.

Эта ссылка дает дополнительную справочную информацию.

Ответ 5

Изменить: поясняет, что это обходное решение для PyCharm 2016.3.0

Настоятельно рекомендуется, чтобы вы только запускали следующую команду

source ~/.bash_profile

в начале каждого сеанса терминала до 2016.3.1.

Однако для этой ошибки существует обходной путь. Терминал script, по-видимому, имеет 2 названия функций, которые были отменены, поэтому их необходимо переименовать.

Чтобы сделать это, вам необходимо отредактировать плагин терминала приложения script, который НЕ рекомендуется.

В MacOSX это расположено здесь, если PyCharm установлен глобально (не уверен, где в противном случае):

cd /Applications/PyCharm.app/Contents/plugins/terminal

Отредактируйте файл 'jediterm- bash.in' с помощью текстового процессора по вашему выбору. Если это должно выглядеть так:

#!/bin/bash

function load_login_configs {
  #       When bash is invoked as an interactive login shell, or as a  non-interac-
  #       tive  shell with the --login option, it first reads and executes commands
  #       from the file /etc/profile, if that  file  exists.   After  reading  that
  #       file,  it  looks  for  ~/.bash_profile, ~/.bash_login, and ~/.profile, in
  #       that order, and reads and executes  commands  from  the  first  one  that
  #       exists  and  is  readable.

  if [ -f /etc/profile ]; then
     source /etc/profile
  fi

  if [ -f ~/.bash_profile ]; then
     source ~/.bash_profile
  else
     if [ -f ~/.bash_login ]; then
        source ~/.bash_login
     else
        if [ -f ~/.profile ]; then
           source ~/.profile
        fi
     fi
  fi
}

function load_interactive_configs {
  if [ -f ~/.bashrc ]; then
       source ~/.bashrc
  fi
}

if [ `shopt -q login_shell` ]; then
  load_login_configs
fi

load_interactive_configs

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
bind '"\e\e[C":forward-word'
bind '"\e\e[D": backward-word'
bind '"\e\O[C":forward-word'
bind '"\e\O[D": backward-word'

function generate_command_executed_sequence() {
   printf '\e\7'
}

export -f generate_command_executed_sequence


#generate escape sequence after command is executed to notify jediterm emulator
trap "generate_command_executed_sequence" DEBUG

if [ -n "$JEDITERM_USER_RCFILE" ]
then
  source $JEDITERM_USER_RCFILE
fi

if [ -n "$JEDITERM_SOURCE" ]
then
  source $JEDITERM_SOURCE
fi

Переименуйте следующие функции:

load_login_configs = > load_interactive_configs

load_interactive_configs = > load_login_configs

Окончательный script должен быть:

#!/bin/bash

function load_interactive_configs {
  #       When bash is invoked as an interactive login shell, or as a  non-interac-
  #       tive  shell with the --login option, it first reads and executes commands
  #       from the file /etc/profile, if that  file  exists.   After  reading  that
  #       file,  it  looks  for  ~/.bash_profile, ~/.bash_login, and ~/.profile, in
  #       that order, and reads and executes  commands  from  the  first  one  that
  #       exists  and  is  readable.

  if [ -f /etc/profile ]; then
     source /etc/profile
  fi

  if [ -f ~/.bash_profile ]; then
     source ~/.bash_profile
  else
     if [ -f ~/.bash_login ]; then
        source ~/.bash_login
     else
        if [ -f ~/.profile ]; then
           source ~/.profile
        fi
     fi
  fi
}

function load_login_configs {
  if [ -f ~/.bashrc ]; then
       source ~/.bashrc
  fi
}

if [ `shopt -q login_shell` ]; then
  load_login_configs
fi

load_interactive_configs

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
bind '"\e\e[C":forward-word'
bind '"\e\e[D": backward-word'
bind '"\e\O[C":forward-word'
bind '"\e\O[D": backward-word'

function generate_command_executed_sequence() {
   printf '\e\7'
}

export -f generate_command_executed_sequence


#generate escape sequence after command is executed to notify jediterm emulator
trap "generate_command_executed_sequence" DEBUG

if [ -n "$JEDITERM_USER_RCFILE" ]
then
  source $JEDITERM_USER_RCFILE
fi

if [ -n "$JEDITERM_SOURCE" ]
then
  source $JEDITERM_SOURCE
fi

Сохраните и перезапустите PyCharm, и вам должно быть хорошо идти.

Ответ 6

для меня то, что работало, не запускало pycharm из приложений, а из терминала с использованием chram. то он унаследовал все env vars и paths