ImportError:没有名为“psycopg2._psycopg”的模块

Posted

技术标签:

【中文标题】ImportError:没有名为“psycopg2._psycopg”的模块【英文标题】:ImportError: No module named 'psycopg2._psycopg' 【发布时间】:2016-07-06 07:24:41 【问题描述】:

当我尝试导入 psycopg2 时,它会为我显示以下日志:

Traceback (most recent call last):
  File "D:/Desktop/learn/python/webcatch/appserver/testpgsql.py", line 2, in <module>
    import psycopg2
  File "D:/Desktop/learn/python/webcatch/appserver/webcatch/lib/site-packages/psycopg2-2.6.1-py3.5-win32.egg/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: No module named 'psycopg2._psycopg'

我该如何解决? 我的平台是win10(64),版本是python 3.5

【问题讨论】:

你是如何安装psycopg2的?当我使用pip install psycopg2 时它没有成功安装,所以它可能特定于它的安装方式。 我按照这个site把它安装在我的电脑上 你能在你的python控制台中检查import psycopg2吗?并检查sys.path看看是否可以找到模块路径? 我只看到 _psycopg.cp35-win_amd64.py_psycopg1.py 但没有 psycopg2._psycopg 【参考方案1】:

尤里卡!我把头发拉了两天,试图让它发挥作用。启示来自this SO Question。简单地说,您可能像我一样安装了 psycopg2 x64 版本,但没有意识到您的 python 版本是 32 位的。卸载当前的 psycopg2,然后:

下载psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe 从HERE,然后在终端中运行以下命令:

C:\path\to\project> easy_install /path/to/psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe
C:\path\to\project> python manage.py makemigrations
C:\path\to\project> python manage.py migrate

您可能还需要(重新)创建超级用户:

C:\path\to\project> python manage.py createsuperuser

【讨论】:

非常感谢。这就是终于解决了一天半的挫败感。我只需要使用 32 位 psycopg2 版本运行“easy_install”。我不必运行 makemigrations/migrate 的东西。干杯! 我使用的是 python 3.6,我刚刚从here 下载了 .exe 并以普通的寡妇方式安装了它...就像使用 pip 而不是 easy_install 这不仅与 windows 或 cpu 架构相关,而且还取决于用于编译包的 python 版本,即使 psycopg2 是用另一个版本的 python 编译的,你也可能遇到这个问题。刚刚用 3.6 编译并在 3.7 上运行并遇到了这个问题:/ @MattiaProcopio 您确实必须根据您使用的内容安装正确的版本,而且stickpeople.com 开发人员似乎还没有支持3.7。【参考方案2】:

我遇到了同样的问题,是这样解决的:

使用pip重新安装包psycopg2(默认情况下与python 3一起安装)

在 Linux 上:

pip 卸载 psycopg2

用 (y) 确认,然后:

pip 安装 psycopg2

在 Windows 上,我将前缀 ('python -m') 添加到上面的命令中。 我认为当您更改 Python 的版本时会出现问题。 (即使在 Python 3.5 和 3.6 等次要版本之间)。

【讨论】:

这绝对对最近从 Python 3.7 切换到 3.8 的我有所帮助 很好的解决方案!今天刚从python 3.8切换到python 3.9,就出现了这个问题?...谢谢...【参考方案3】:

从此链接https://github.com/jkehler/awslambda-psycopg2 下载 psycopg2 的编译版本。由于 psycopg2 是 python 的 C 库,需要在 linux 上编译才能使其工作。该链接上也给出了编译指令。感谢https://github.com/jkehler。

【讨论】:

我不认为 OP 使用的是 AWS Lambda,但如果你是,这绝对是这样做的方法!谢谢!! 我们可以点安装吗?【参考方案4】:

我在 AWS Glue 作业中使用 psycopg,但很难按照其他答案中列出的说明进行操作。

我所做的是将 psycopg2-binary 安装到一个目录中并压缩该目录的内容:

mkdir psycopg2-binary
cd psycopg2-binary
pip install psycopg2-binary -t  .
# in case using python3:
# python3 -m pip install --system psycopg2-binary -t  .
zip -r9 psycopg2.zip *

然后,我将 psycopg2.zip 复制到 S3 存储桶中,并将其作为额外的 Python 库添加到 Glue Spark 作业的“Python 库路径”下。

然后我使用以下脚本启动作业以验证 psycopg2 是否存在(压缩文件将由 Glue 下载到作业脚本所在的目录中)

from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import sys
import os
import zipfile

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

zip_ref = zipfile.ZipFile('./psycopg2.zip', 'r')
print os.listdir('.')
zip_ref.extractall('/tmp/packages')
zip_ref.close()
sys.path.insert(0, '/tmp/packages')

import psycopg2
print(psycopg2.__version__)

job.commit()

【讨论】:

这对我也有用。感谢您的代码示例【参考方案5】:

这也发生在新的 Ubuntu 18.04 中。是/usr/local/lib/python3.7/site-packages/psycopg2中缺少一个文件_psycopg.py造成的。

它是由以下固定的:

    从您的机器上删除旧的 psycopg2 pip3 uninstall psycopg2。 从official pagehttp://initd.org/psycopg/tarballs/PSYCOPG-2-7/psycopg2-2.7.7.tar.gz手动下载新的pyscopg2 tar xvf psycopg2-2.7.7.tar.gz python setup.py build sudo python setup.py install

【讨论】:

【参考方案6】:

我在使用 Python 3.7 的 Linux 中发生了这种情况。这是由于在/usr/local/lib/python3.7/site-packages/psycopg2中缺少一个文件_psycopg.cpython-37m-x86_64-linux-gnu.so引起的。 我从https://github.com/jkehler/awslambda-psycopg2/tree/master/psycopg2-3.7 下载了_psycopg.cpython-37m-x86_64-linux-gnu.so,并将这个文件复制到我的anaconda 库中。

【讨论】:

【参考方案7】:

我在使用 Python 2 的 Linux 中发生了这种情况,因为我不小心将 PYTHONPATH 设置为 Python 3 库,并且它试图加载 psycopg2 的 python3 版本。解决方案是unset PYTHONPATH

【讨论】:

【参考方案8】:

我在 Windows 上遇到了同样的错误,这对我有用: pip install -U psycopg2

我安装了旧版本,一定是折旧了

【讨论】:

【参考方案9】:

我开始知道大多数情况下 WINDOWS 包装与 LAMBDA 不兼容。

我在安装 WINDOWS 的情况下运行 LAMBDA 时遇到了同样的问题,第 3 方 pscyopg2 包装。

解决办法:

第 1 步> 我在 Linux 中安装了psycopg2。 将目录psycopg2_binary-2.8.2.dist-infopsycopg2 从Linux 复制到Windows。

第二步> 连同源代码*.py,在windows 中使用复制的第三方依赖psycopg2 打包到*.zip 文件中

第三步> 将文件上传到 LAMBDA - 就这样,它运行成功,没有任何错误。

【讨论】:

【参考方案10】:

对于 Python 3.7 上的 lambda 函数,我最终使用了这些线程中提到的 psycopg2-binary 库:

https://github.com/jkehler/awslambda-psycopg2/issues/51

Using psycopg2 with Lambda to Update Redshift (Python)

pip3 install psycopg2-binary==2.8.3

来自这些链接的片段:

I ended up using a different library: psycopg2-binary in my requirement.txt file and it working fine now.

solved it by using psycopg2-binary==2.8.3

【讨论】:

【参考方案11】:

mac M1用户(其他用户也可以试试),

pip 卸载 psycogp2

然后

pip install psycopg2-binary

它适用于我的情况。

【讨论】:

【参考方案12】:

对于 Mac,python mycode.py migrate 修复了导入问题

【讨论】:

以上是关于ImportError:没有名为“psycopg2._psycopg”的模块的主要内容,如果未能解决你的问题,请参考以下文章

没有名为 psycopg2 的模块和请求

psycopg2 ImportError:未定义符号:PQconninfo

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

ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2

ModuleNotFoundError:运行时没有名为“psycopg2”的模块

Django,mod_wsgi,psycopg2 配置不当:加载 psycopg2 模块时出错:没有名为 _psycopg 的模块