Pycharm окружение отличается от командной строки
У меня проблема с тем, чтобы моя среда Pycharm соответствовала среде, которая у меня есть в командной строке. Я недавно удалил python и переустановил его через домашний кофе. Питон на моем пути указывает на /usr/local/bin/python
я добавил PATH=/usr/local/bin:$PATH
в начале моего файла.bash_profile, и я могу выполнить следующий код просто отлично в интерпретаторе в командной строке. Тем не менее, когда я добавляю /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'
9 ответов
.bash_profile
читается только bash (вашим интерпретатором командной строки). Однако, если вы хотите сохранить среду bash для PyCharm, есть один настоящий способ Linux.
Запустите PyCharm из командной строки (из bash). Таким образом, переменные окружения будут наследоваться от bash до pycharm. Читать $man
environment для информации о процессе наследования среды linux. Так что все, что вам нужно, это просто запустить ${PATH_TO_PYCHARM}/bin/pycharm.sh
из командной строки. Или создайте панель запуска, которая запускает bash для запуска PyCharm.
Это оно! Надеюсь, что это работает для вас.
Если вы используете PyCharm версии 2016.3 и заметили, что ваш терминал PyCharm больше не предоставляет ту же среду по умолчанию, что и среда терминала MacOs, это ошибка, которая должна быть исправлена в 2016.3.1 - всякий раз, когда он выпускается. В то же время, это обходной путь, который должен "по умолчанию" для всех ваших проектов PyCharm использовать более MacOS-терминал, такой как PyCharm-Terminal:
Создайте файл ~/.bashrc со следующим содержимым:
source /etc/bashrc
source /etc/bashrc_Apple_Terminal
source ~/.bash_profile
Это должно настроить ваш терминал PyCharm (интерактивный сеанс bash) и сделать его похожим на терминал MacOS (сеанс входа в bash). После того, как JetBrains исправит и выпустит 2016.3.1, я рекомендую удалить это ~/.bashrc
файл. Надеюсь, это вернет нас к нормальной жизни.
Другой подход заключается в создании сценария с настройкой переменных среды (например, .bash_profile
) добавив строку . /path/to/script
в PY_CHARM_INSTALL_DIR/bin/pycharm.sh
,
После этого вы можете запустить pycharm, используя быстрый обед или что-то еще, и ваши переменные будут там.
Изменить: уточнение, что этот обходной путь для PyCharm 2016.3.0
Настоятельно рекомендуется выполнить следующую команду
source ~/.bash_profile
в начале каждого терминального сеанса до 2016.3.1 освобождается.
Тем не менее, есть обходной путь для этой ошибки. Похоже, что в терминальном скрипте 2 имени функций обращены вспять, поэтому они должны быть переименованы.
Вы должны отредактировать скрипт плагина терминала приложения, чтобы сделать это, что НЕ рекомендуется.
На 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
Окончательный сценарий должен быть:
#!/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, и у вас все получится.
Я только что нашел решение для этого, которое работает в PyCharm 2017.1.2
снимите флажок Инструменты> Терминал> "интеграция оболочки"
Источник: ответ @Federicojama в нижней части страницы https://intellij-support.jetbrains.com/hc/en-us/community/posts/208567485-Pycharm-terminal-is-missing-part-of-PATH
К сожалению, в Mac OS X графические приложения не наследуют вашу конфигурацию.bash_profile. Я публикую обновленный обходной путь для OSX 10.11 о том, как настроить переменные среды на уровне графического интерфейса:
Есть полезный репозиторий osx-env-sync, который читает ~/.bash_profile и устанавливает экспортируемые в него переменные среды для приложений с графическим интерфейсом. После копирования 2 файлов и запуска 2 других команд, описанных на странице github, можно быстро запустить Pycharm с глобальными переменными, доступными, как определено в bash_profile.
Эта ссылка дает дополнительную справочную информацию.
Я идиот и совершенно забыл, что работаю в виртуальной среде! source /.profile
Команду необходимо запустить в активированной виртуальной среде в Терминале! Я думаю, что у некоторых может быть тяжелый день (или такая же мозговая дисфункция, как у меня), и они найдут это полезным.
Для меня работало не запускать pycharm из приложений, а из терминала, использующего chram . тогда он унаследовал все переменные env и пути
Я использую pycharm в OSX.
Pycharm > Preferences > Terminal
имел путь к оболочке как. Но эта оболочка не была синхронизирована с другими моими эмуляторами терминала, такими как iTerm. Например, моя среда conda не инициализировалась (даже базовая среда).
Решение: изменение пути к оболочке с
/bin/zsh
к
/usr/bin/env zsh
починил для меня вещи. Для
bash
, добавив путь к оболочке как
/usr/bin/env bash
должно сработать.