Окружение 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
Ответ 7
Я просто нашел решение для этого, которое работает в PyCharm 2017.1.2
снимите флажок Инструменты > Терминал > "интеграция с оболочкой"
источник: ответ от @Federicojama в нижней части страницы
https://intellij-support.jetbrains.com/hc/en-us/community/posts/208567485-Pycharm-terminal-is-missing-part-of-PATH