首页 新闻 会员 周边

Linux中python导入psycopg2报错缺少libssl.so.10文件

0
悬赏园豆:50 [已解决问题] 解决于 2024-08-08 11:20

Linux服务器:NingOS V3(只有内网)
python:3.9
报错信息:

>>> import psycopg2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/u01/bigdata/anaconda3/lib/python3.9/site-packages/psycopg2-2.9-py3.9-linux-x86_64.egg/psycopg2/init.py",
line 51, in <module>
from psycopg2._psycopg import ( # noqa
ImportError: libcrypto.so.10: cannot open shared object file: No such file or directory

我就单纯通过python进入应用,然后执行import psycopg2就直接报错了。信息说缺少libcrypto.so.10文件,我正在网上搜索了很多教程,这个文件在很多地方都出现过,有些是yum安装命令的时候报这个错,有些是openssl报的这个错,我是import psycopg2报的这个错。

所以libcrypto.so.10这个文件到底是系统自带的?openssl安装附带的?还是python安装自带的啊?我在系统上找到了很多libcrypto.so.10的文件,但是通过网上教程建立软链接还是没用。

想问下libcrypto.so.10这个文件到底是哪来的?标题的问题有解决方法吗?

幻梦1999的主页 幻梦1999 | 菜鸟二级 | 园豆:353
提问于:2024-07-18 15:32
< >
分享
最佳答案
0

目前找不到根本原因,我们只能盲试。如果你的服务器有strace命令,你可以用这个查看一下脚本运行时,到底往哪个地方找libcrypto.so.10这个东西,它肯定会调用open或者dlopen函数(我不记得这俩日志会显示调用哪个了)来打开动态链接库。比如打开个文件,如果找不到,会有这个记录:

open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)

工具使用文档:https://man7.org/linux/man-pages/man1/strace.1.html

收获园豆:20
寂静的羽夏 | 老鸟四级 |园豆:2066 | 2024-07-19 09:25
其他回答(3)
0

OpenSSL检查下这个库安装没,全局搜一下libcrypto.so.10,没有的话需要装一下OpenSSL

收获园豆:20
秃头的张大脑袋 | 园豆:234 (菜鸟二级) | 2024-07-18 15:56

openssl version -a
这个命令检查多了,有安装信息。
全局搜索有libcrypto.so.10,但是路径都和python无关,根据网上的教程创建了软链接,还是没用

支持(0) 反对(0) 幻梦1999 | 园豆:353 (菜鸟二级) | 2024-07-18 16:30

@幻梦1999: 重新编译python看下呢

支持(1) 反对(0) 秃头的张大脑袋 | 园豆:234 (菜鸟二级) | 2024-07-18 16:40
0

来自ai

libcrypto.so.10是一个被OpenSSL使用的共享对象文件,OpenSSL是一个常用的加密库,被许多应用程序使用,其中包括psycopg2(Python的PostgreSQL适配器)。错误信息表明该文件在您的系统上丢失。
要解决此问题,您可以尝试以下步骤:

  1. 验证您的系统上是否安装了OpenSSL。您可以使用包管理器(例如某些Linux发行版上的yum)来检查是否已安装或安装它(如果尚未安装)。
  2. 如果已经安装了OpenSSL,请检查libcrypto.so.10文件是否存在于正确的位置上。您可以使用find命令进行搜索:find / -name "libcrypto.so.10"。如果找到多个实例,请确保您链接到正确的一个。
  3. 找到libcrypto.so.10文件后,您可以在包含在系统库搜索路径中的目录中创建一个符号链接。例如,您可以使用ln命令在/usr/lib目录中创建一个符号链接:ln -s /path/to/libcrypto.so.10 /usr/lib/libcrypto.so.10
  4. 创建符号链接后,尝试在Python中重新导入psycopg2,以查看错误是否仍然存在。如果仍然存在错误,您可能需要检查其他缺少的依赖项或考虑重新安装psycopg2。
    在更改系统文件或安装软件时,请咨询您的系统管理员或遵循公司的IT政策。
收获园豆:5
Technologyforgood | 园豆:7199 (大侠五级) | 2024-07-18 16:41

我已经试过了,上面说的建立软链接就是建立的找到的libcrypto.so.10文件路径

支持(0) 反对(0) 幻梦1999 | 园豆:353 (菜鸟二级) | 2024-07-18 17:34
0

libcrypto.so.10是 OpenSSL 库的一部分,它提供了加密和 SSL/TLS 协议的实现。这个库是由 OpenSSL 项目提供的,并不是 Python 或者 Psycopg2 自带的。它通常是通过系统的包管理器安装的,例如在基于 Red Hat 的系统(如 CentOS、Fedora 等)上使用yum,或者在基于 Debian 的系统(如 Ubuntu)上使用 apt`。

在 NingOS V3 上,由于它是一个内网系统,可能没有直接的互联网连接,这可能会导致使用包管理器安装 OpenSSL 时遇到困难。不过,如果你在系统上已经找到了 libcrypto.so.10 文件,问题可能是 Psycopg2 无法找到这个库的正确路径。

要解决这个问题,你可以尝试以下步骤:

查找 libcrypto.so.10 的位置: 使用 find 命令查找系统上的 libcrypto.so.10 文件:

sudo find / -name libcrypto.so.10
创建符号链接: 一旦你找到了 libcrypto.so.10 的位置,你可以在 /usr/lib 或者 /usr/lib64 目录下创建一个符号链接指向它。例如,如果文件位于 /usr/local/ssl/lib,你可以使用以下命令:

sudo ln -s /usr/local/ssl/lib/libcrypto.so.10 /usr/lib64/libcrypto.so.10
确保链接的目标路径是正确的,并且是系统默认搜索库的路径之一。

设置环境变量: 你可以通过设置 LD_LIBRARY_PATH 环境变量来帮助系统找到 OpenSSL 库:

export LD_LIBRARY_PATH=/path/to/directory/containing/libcrypto:$LD_LIBRARY_PATH
将 /path/to/directory/containing/libcrypto 替换为包含 libcrypto.so.10 的实际目录。

重新配置 Psycopg2: 如果上述方法都不起作用,你可能需要重新配置和编译 Psycopg2,确保它能够找到正确的 OpenSSL 库。这可能涉及到在安装 Psycopg2 时指定 --with-openssl 选项,或者在编译时指定 --openssldir 选项。

确保 OpenSSL 正确安装: 如果你发现 OpenSSL 没有正确安装,你需要通过系统的包管理器进行安装或者从源代码编译安装。由于 NingOS V3 是内网系统,你可能需要从另一台有互联网连接的机器上下载相应的包或源代码,并通过内网传输到 NingOS V3 系统上进行安装。

使用虚拟环境: 考虑使用 Python 的虚拟环境来安装 Psycopg2,这样可以避免与系统级的 Python 环境冲突,并且可以更容易地控制依赖关系。

如果在尝试了上述步骤后仍然无法解决问题,你可能需要更详细地检查系统的配置和 Psycopg2 的安装日志,以确定具体的错误原因。

收获园豆:5
没有烟抽的日子 | 园豆:274 (菜鸟二级) | 2024-07-19 16:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册