pypy3 导入 psycopg2 错误(未定义符号:PyCoder_Encoder)

Posted

技术标签:

【中文标题】pypy3 导入 psycopg2 错误(未定义符号:PyCoder_Encoder)【英文标题】:pypy3 import psycopg2 error (undefined symbol: PyCoder_Encoder) 【发布时间】:2019-04-19 16:11:08 【问题描述】:

我在Ubuntu16.04上通过以下代码将psycopg2安装到pypy3(Python3.5.3):

pypy3 -m pip install psycopg2

但是,我遇到了一些错误:

错误:b'您需要安装 postgresql-server-dev-X.Y 来构建服务器端扩展或 libpq-dev 来构建客户端应用程序。\n'

命令“python setup.py egg_info”在 /tmp/pip-install-epd368s6/psycopg2 中失败,错误代码为 1

我在“You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application”中找到了解决方案。

我的电脑已经安装了Postgresql9.5,所以我用这些命令安装:

sudo apt-get install libpq-dev
pypy3 -m pip install psycopg2

没有报错,但是当我尝试“import psycopg2”时,我得到了 ImportError:

enter image description here

我在“pypy3 import psycopg2 error (PyCodec_Encoder)”中发现了同样的错误,但我没有找到解决办法。

有人知道怎么解决吗?

【问题讨论】:

【参考方案1】:

您pointed to 的 PyPy 问题包含答案“有人将不得不实现缺失的函数(以及其他缺失的 PyCodec_* 函数。目前我们在codec.py 中只实现了极少数。实现非常简单在实现函数的模式上,更难的部分是编写测试。

有psycopg2cffi package,它应该可以在 PyPy 上运行并且会更快。如果它满足您的需求,不妨试一试并在此处发表评论。

【讨论】:

pscopg2cffi 及其 compat 模块使其伪装成 psycopg2 是答案。【参考方案2】:

psycopg2-binary 可与最新版本的 PyPy 3.6(从 2020 年 1 月 23 日开始每晚构建)一起使用,因为它包含 PyCodec_Encoder 和 PyCodec_Decoder 实现。

【讨论】:

很好的建议,这个修复了我的“未定义符号:timeradd”错误。

以上是关于pypy3 导入 psycopg2 错误(未定义符号:PyCoder_Encoder)的主要内容,如果未能解决你的问题,请参考以下文章

导入 psycopg2

面相对象之命名空间注意事项

在 CentOS 上安装 psycopg2 时遇到问题

psycopg2 模块无法识别

Postgres Python 查询导入 pg 与导入 psycopg2

在 ubuntu 服务器 16.04 上安装 psycopg2 时出错