Psycopg2可以通过pip安装,但在OS X 10.9上无法导入模块。

7

我已经使用以下命令安装了psycopg2:

pip install psycopg2

它工作得很好。安装输出中有一些类似的警告信息

In file included from ./psycopg/psycopg.h:33:
./psycopg/config.h:71:13: warning: unused function 'Dprintf' [-Wunused-function]
static void Dprintf(const char *fmt, ...) {}
            ^
1 warning generated.

但最终它说

Successfully installed psycopg2

当我运行pip list时,它也会出现。

现在我尝试在Python中导入它,但是出现了错误:

$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named psycopg2

为什么已成功安装的模块无法在Python中导入? (使用Homebrew安装了Python 2.7.5。使用pip安装了psycopg2。)
1个回答

8

OS X已经自带了Python 2.7.5。当你使用Homebrew安装Python时,它会将更新的版本放在一个不同的位置,而不会触及内置的版本。Homebrew的Python还附带有Pip,而OS X没有。现在实际上是你正在使用Homebrew的 pip 安装psycopg2,然后运行OS X的 python 并尝试导入它。

运行/usr/local/bin/python(即Homebrew Python的完整路径),并尝试从那里使用import psycopg2

如果这样可以工作,那么你需要将/usr/local/bin放在/usr/bin前面,这样每次shell都会先找到Homebrew的Python而不是OS X的Python。如果你使用Bash(OS X的默认shell),则可以在.bash_profile中加入以下代码来实现此功能:

export PATH=/usr/local/bin:$PATH

为了确保在脚本中运行正确的Python,请使用以下Shebang行:
#!/usr/bin/env python

env 将在 PATH 中搜索 Python,并使用找到的第一个运行脚本,就像从 shell 输入 python 一样。Bash 脚本等应该继承 PATH 变量,不需要进行更改即可找到正确的 Python。

您还可以将 Homebrew Python 的路径硬编码到 shebang 行中 (#!/usr/local/bin/python),但这意味着您的脚本仅适用于安装了 Homebrew Python 的 OS X 设备,最好避免这种方式。


谢谢Adam。当我在终端中运行$ usr/local/bin/python时,我实际上可以导入psycopg2。但是,当我尝试对.bash_profile进行您建议的更改时,没有任何更改生效。我使用了$ source .bash_profile,然后$ python,但是旧的python仍然出现。如何使brew的python成为终端中的默认python?(另外,当我运行一个python脚本文件,比如从我编写的shell脚本中,如何确保它使用brew的python调用?) - bootsmaat
1
我刚刚意识到我写的是 set,但我本意是要写 export;这样Bash默认就能找到正确的了。我已经编辑了我的答案来修复这个问题,并回答了你的其他问题。 - Daisy Leigh Brenecki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接