【发布时间】:2012-08-07 00:17:59
【问题描述】:
我正在尝试让 psycopg2 在 ML 上工作,默认为 Python 2.7 (2.7.2)。我通过自制软件安装了 postgresql,并用 pip 安装了 psycopg2。 Postgres 顺利启动并运行,PGAdmin3 可以看到我创建的 db。
但是当我运行 python 并尝试时
import psycopg2
我明白了:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/psycopg2/__init__.py", line 67, in <module>
from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: dlopen(/Library/Python/2.7/site-packages/psycopg2/_psycopg.so, 2): Symbol not found: _PQbackendPID
Referenced from: /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
Expected in: flat namespace
in /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
现在sudo pip install psycopg2 的输出并不完全干净。 Clang 给出了一堆警告,但没有错误:
警告:编译期间未使用的参数:'-mno-fused-madd'
警告:未使用的函数“Dprintf” 警告:隐式转换丢失整数精度:“long”到“int” 警告:无符号表达式 ld:警告:忽略文件/usr/local/Cellar/postgresql/9.1.4/lib/libpq.dylib,文件是为不受支持的文件格式构建的(0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 )不是被链接的架构(i386):/usr/local/Cellar/postgresql/9.1.4/lib/libpq.dylib
最后一个链接器警告让我担心,我想知道它是否又是旧的 32-vs-64 位 Python 问题。我试过旧的:
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
但没有骰子。
我接下来的想法是:强制 brew 将 postgresql 编译为 x86_64,或者从 brew 安装 python。我想要第一个选择,因为我还有一些其他软件(叹气),这取决于 Apple 的 Python 在 PATH 中的第一个位置。
任何想法如何使用 brew 将 postgresql 编译为 64 位?
【问题讨论】:
-
ld: warning关于忽略libpq.dylib说the architecture being linked是i386,这意味着您的python 似乎已经是32 位但postgres 是64。不知道为什么它打印出一堆不过,十六进制而不是架构名称....您可以使用file /usr/local/Cellar/postgresql/9.1.4/lib/libpq.dylib检查libpq架构。 -
@Dougal 我收到了
/usr/local/Cellar/postgresql/9.1.4/lib/libpq.5.4.dylib: Mach-O 64-bit dynamically linked shared library x86_64。 -
@Dougal 啊!将
defaults write切换为no解决了这个问题。谢谢!我都变了。
标签: python homebrew psycopg2 osx-mountain-lion