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-info
和psycopg2
从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 ImportError:未定义符号:PQconninfo
ImportError:无法加载指定的对象 - psycopg2
ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2
ModuleNotFoundError:运行时没有名为“psycopg2”的模块
Django,mod_wsgi,psycopg2 配置不当:加载 psycopg2 模块时出错:没有名为 _psycopg 的模块