ImportError: No module named 'psycopg2._psycopg'

ImportError: No module named 'psycopg2._psycopg'

当我尝试导入 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位)版本是python3.5

尤里卡!我把头发拔了 2 天,试图让它发挥作用。启蒙来自。简单地说,你可能像我一样安装了 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

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

从这里下载psycopg2的编译版本link https://github.com/jkehler/awslambda-psycopg2. As psycopg2 is C library for python, which need to be compiled on linux to make it work. The compile instruction also given on that link. Thanks to the https://github.com/jkehler.

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

使用 pip 重新安装软件包 psycopg2(默认安装 python 3)

在 Linux:

pip uninstall psycopg2

用 (y) 确认,然后:

pip install psycopg2

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

我在新的 Ubuntu 18.04 中也遇到了这种情况。是/usr/local/lib/python3.7/site-packages/psycopg2.

中缺少一个文件_psycopg.py造成的

它被修复:

  1. 从您的机器中删除旧的 psycopg2 pip3 uninstall psycopg2
  2. official page http://initd.org/psycopg/tarballs/PSYCOPG-2-7/psycopg2-2.7.7.tar.gz
  3. 手动下载新的 pyscopg2
  4. tar xvf psycopg2-2.7.7.tar.gz
  5. python setup.py build
  6. sudo python setup.py install

我了解到大多数情况下 WINDOWS 包装不适合 LAMBDA。

我遇到了同样的问题,而 运行 LAMBDA WINDOWS 安装了第 3 方 pscyopg2 包装。

解决方案:

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

步骤 2>
连同源代码 *.py,与复制的第 3 方依赖项 psycopg2 一起打包到 windows 到 *.zip 文件

步骤 3>
将文件上传到 LAMBDA - 好了,它运行成功,没有任何错误。

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

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

我在 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 library path" 下。

然后我使用以下脚本启动作业以验证 psycopg2 是否存在(zip 文件将由 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()

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

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

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

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

我在 Linux 使用 Python 3.7 时遇到过这种情况。是/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 库中。

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

pip uninstall psycogp2

然后

pip install psycopg2-binary

它适用于我的情况。