25

我在让我的 Pycharm 环境与命令行上的环境匹配时遇到问题。我最近删除了 python 并通过 home brew 重新安装了它。我路径中的 python 指向/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”

4

8 回答 8

27

.bash_profile仅由 bash(您的命令行解释器)读取。但是,如果您想为 PyCharm 保留 bash 环境,则有一种真正的 Linux 方式。

从命令行(从 bash)运行 PyCharm。因此环境变量将从 bash 继承到 pycharm。阅读$manenviron 了解有关 linux 环境继承过程的信息。所以你只需要${PATH_TO_PYCHARM}/bin/pycharm.sh从命令行启动。或者创建调用 bash 以启动 PyCharm 的启动器。

而已 !希望这对你有用。

于 2013-10-31T21:35:43.013 回答
5

如果您使用的是 PyCharm 版本 2016.3,并且注意到您的PyCharm 终端不再提供与MacOs 终端环境相同的默认环境,那么这是一个应该在 2016.3.1 中修复的错误 - 无论何时发布同时,以下是一种解决方法,它应该“默认”所有 PyCharm 项目返回一个更像 PyCharm-T​​erminal 的更多 MacOS-Terminal:

创建一个具有以下内容的 ~/.bashrc 文件: source /etc/bashrc source /etc/bashrc_Apple_Terminal source ~/.bash_profile

应该设置您的 PyCharm 终端(交互式 bash 会话)并使其类似于 MacOS 终端(登录 bash 会话)。一旦 JetBrains 修补并发布 2016.3.1,我建议删除此~/.bashrc文件。希望这会让我们都恢复正常。

于 2016-12-13T07:22:47.890 回答
3

另一种方法是.bash_profile通过. /path/to/scriptPY_CHARM_INSTALL_DIR/bin/pycharm.sh.

之后,您可以使用 quick-lunch 或其他方式运行 pycharm,并且您的变量将在那里。

于 2015-12-16T15:17:10.297 回答
2

编辑:澄清此解决方法适用于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,您应该一切顺利。

于 2016-12-13T15:35:57.910 回答
1

实际上,我刚刚找到了一个适用于 PyCharm 2017.1.2 的解决方案

取消选中工具>终端>“外壳集成”

来源:来自页面底部附近的@Federicojama 的回答 https://intellij-support.jetbrains.com/hc/en-us/community/posts/208567485-Pycharm-terminal-is-missing-part-of-PATH

于 2017-05-23T19:51:38.947 回答
1

不幸的是,在 Mac OS X 中,图形应用程序不会继承您的 .bash_profile 配置。我正在发布有关如何在 GUI 级别设置环境变量的 OSX 10.11 的更新解决方法:

有一个名为osx-env-sync的有用 repo ,它读取 ~/.bash_profile 并设置其中为 GUI 应用程序导出的环境变量。复制 2 个文件并运行 github 页面上描述的 2 个其他命令后,可以使用 bash_profile 中定义的全局变量快速启动 Pycharm。

链接提供了更多背景信息。

于 2016-07-09T22:08:58.597 回答
0

对我来说,有效的不是从应用程序运行 pycharm,而是从使用 chram 的终端运行。然后它继承了所有的环境变量和路径

于 2017-01-04T11:02:36.030 回答
0

我在 OSX 上使用 pycharm。 Pycharm > Preferences > Terminal外壳路径为/bin/zsh. 但是这个 shell 环境与我的其他终端仿真器(如 iTerm)不同步。例如,我的 conda 环境没有被初始化(甚至不是基本环境)。

解决方案:为我将 shell 路径从更改/bin/zsh/usr/bin/env zsh固定的东西。对于bash,添加 shell 路径/usr/bin/env bash应该可以。

于 2021-05-24T05:46:21.033 回答