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

时间:2016-03-19 14:38:54

标签: python-3.x psycopg2 importerror

当我尝试导入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

11 个答案:

答案 0 :(得分:11)

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

从<{3}}

下载 psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe ,然后在终端:

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

答案 1 :(得分:4)

我有同样的问题,用这种方式解决了:

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

在Linux上:

  

pip uninstall psycopg2

用(y)确认然后:

  

pip install psycopg2

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我在新的Ubuntu 18.04中也遇到了这种情况。这是由于/usr/local/lib/python3.7/site-packages/psycopg2中缺少一个文件_psycopg.py造成的。

它的固定方式是:

  1. 从计算机pip3 uninstall psycopg2中删除旧的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

答案 5 :(得分:1)

我在使用 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 库中。

答案 6 :(得分:0)

我知道大多数情况下WINDOWS包装对于LAMBDA来说效果不佳。

运行带有已安装第3方pscyopg2包装的WINDOWS的LAMBDA时,我遇到相同的问题。

解决方案:

step1>
我在Linux上安装了psycopg2
将目录psycopg2_binary-2.8.2.dist-infopsycopg2从Linux复制到Windows。

step2>
与源*.py一起,在Windows中与复制的第三方依赖项psycopg2一起打包到*.zip文件中

step3>
将文件上传到LAMBDA-可以正常运行,没有任何错误。

答案 7 :(得分:0)

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

我安装了旧版本,必须折旧

答案 8 :(得分:0)

我在AWS Glue Job中使用了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(zip文件将由Glue下载到Job脚本所在的目录中)

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()

答案 9 :(得分:0)

对于 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

答案 10 :(得分:-1)

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