ImportError:无法加载指定的对象 - psycopg2

Posted

技术标签:

【中文标题】ImportError:无法加载指定的对象 - psycopg2【英文标题】:ImportError: Cannot load specified object - psycopg2 【发布时间】:2013-01-16 07:03:17 【问题描述】:

OpenBSD、PostgreSQL9.2、python2.7 尝试从 python 命令行导入 psycopg2 模块:

Python 2.7.3 (default, Aug  3 2012, 05:33:56)
[GCC 4.2.1 20070719 ] on openbsd5
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 67, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: Cannot load specified object

psycopg2 已编译并安装。我在 /site-packages/psycopg2 文件夹中看到了 _psycopg.so。也许他看不到这个图书馆?

【问题讨论】:

你确定这可以从 psycopg2 导入:BINARY, NUMBER, STRING, DATETIME, ROWID 吗?什么是 ROWID? @MikedeKlerk:psycopg2 库的一部分;回溯的最后一行是尝试导入 C 扩展的 python 模块。不可导入的事实是这个问题的原因,图书馆坏了。 【参考方案1】:

psycopg2 python 模块包含一个用 C 编写的扩展。无法加载该扩展,因为缺少它所依赖的另一个 C 库。

检查您是否仍然安装了 PostgreSQL 客户端库,并且 psycopg2 可以找到它。

请注意,如果您在 WSGI 服务器中运行 Django,则需要在 WSGI 服务器启动之前设置LD_LIBRARY_PATH 环境变量。或者,使用LD_RUN_PATH=/usr/local/pgsql/lib 重新编译psycopg2 扩展,以在链接时“硬编码”PostgreSQL 客户端库的路径,从而无需设置LD_LIBRARY_PATH

最后的办法是将/usr/local/pgsql/lib 路径添加到/etc/ld.so.conf,参见ld.so(8) manpage。

【讨论】:

它是指向库的指针 (LD_LIBRARY_PATH=/usr/local/pgsql/lib)。 Python 命令行现在导入 psycopg2 并设置连接。 Django 仍然在写同样的错误。 @dima.h: 你在使用 WSGI 服务器来运行 Django 吗? LD_RUN_PATH 没有帮助。 Django 环境中是否有库路径? @dima.h:为您添加的最后一个选项。 ldconfig OpenBSD 与 Linux 软件包不同。有用。谢谢)

以上是关于ImportError:无法加载指定的对象 - psycopg2的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:DLL 加载失败:找不到指定的过程。 (导入sklearn)

sklearn:ImportError:DLL加载失败:找不到指定的模块

ImportError:导入聚合时DLL加载失败:找不到指定的模块

NumPy 库 ImportError:DLL 加载失败:找不到指定的过程

Windows上的Tensorflow - ImportError:DLL加载失败:找不到指定的模块

ImportError:DLL 加载失败:找不到指定的模块。尝试“从 PIL 导入图像”时