当我尝试导入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
答案 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造成的。
它的固定方式是:
pip3 uninstall psycopg2
中删除旧的psycopg2。tar xvf psycopg2-2.7.7.tar.gz
python setup.py build
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-info
和psycopg2
从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
,修复了导入问题