![](/img/trans.png)
[英]./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
[英]libssl.so.1.1: cannot open shared object file: No such file or directory
我剛剛更新到Ubuntu 22.04 LTS ,我使用OpenSSL的庫剛剛停止工作。 看起來像 Ubuntu 切換到 OpenSSL 的 3.0 版本。
例如,詩歌停止工作:
Traceback (most recent call last):
File "/home/robz/.local/bin/poetry", line 5, in <module>
from poetry.console import main
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/__init__.py", line 1, in <module>
from .application import Application
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/application.py", line 7, in <module>
from .commands.about import AboutCommand
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/__init__.py", line 4, in <module>
from .check import CheckCommand
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/check.py", line 2, in <module>
from poetry.factory import Factory
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/factory.py", line 18, in <module>
from .repositories.pypi_repository import PyPiRepository
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/repositories/pypi_repository.py", line 33, in <module>
from ..inspection.info import PackageInfo
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/inspection/info.py", line 25, in <module>
from poetry.utils.env import EnvCommandError
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/utils/env.py", line 23, in <module>
import virtualenv
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/__init__.py", line 3, in <module>
from .run import cli_run, session_via_cli
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/run/__init__.py", line 11, in <module>
from ..seed.wheels.periodic_update import manual_upgrade
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/__init__.py", line 3, in <module>
from .acquire import get_wheel, pip_wheel_env_run
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/acquire.py", line 12, in <module>
from .bundle import from_bundle
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/bundle.py", line 4, in <module>
from .periodic_update import periodic_update
File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/periodic_update.py", line 10, in <module>
import ssl
File "/home/robz/.pyenv/versions/3.9.10/lib/python3.9/ssl.py", line 98, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: libssl.so.1.1: cannot open shared object file: No such file or directory
有簡單的解決方法嗎? 例如,無需卸載 OpenSSL 3 即可使用libssl.so.1.1
(我不知道這是否可能)。
這修復了它(22.04 中的打包問題):
wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1l-1ubuntu1.6_amd64.deb
sudo dpkg -i libssl1.1_1.1.1l-1ubuntu1.6_amd64.deb
PS:如果鏈接已過期,請檢查http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/?C=M;O=D是否有效。
更新 2022/11/09
$ echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
$ apt-get update && \
apt-get install libssl1.1
$ dpkg -L libssl1.1
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/engines-1.1
/usr/lib/x86_64-linux-gnu/engines-1.1/afalg.so
/usr/lib/x86_64-linux-gnu/engines-1.1/capi.so
/usr/lib/x86_64-linux-gnu/engines-1.1/padlock.so
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 <---
/usr/lib/x86_64-linux-gnu/libssl.so.1.1 <---
/usr/share
/usr/share/doc
/usr/share/doc/libssl1.1
/usr/share/doc/libssl1.1/NEWS.Debian.gz
/usr/share/doc/libssl1.1/changelog.Debian.gz
/usr/share/doc/libssl1.1/copyright
更新 2022/11/06
# /usr/local/bin/mysql -uroot -h127.0.0.1 -p
/usr/local/bin/mysql: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
$ ldd /usr/local/bin/mysql
linux-vdso.so.1 (0x00007fff1e576000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e6db3e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e6db39000)
libcrypto.so.1.1 => not found
libssl.so.1.1 => not found
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f7e6db25000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7e6db1e000)
libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f7e6daf8000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f7e6dac9000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6d89d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6d7b6000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6d796000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6d56c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7e6db4b000)
$ wget -c https://www.openssl.org/source/openssl-1.1.1s.tar.gz && \
tar xf openssl-1.1.1s.tar.gz && \
cd openssl-1.1.1s/ && \
./config --prefix="/usr/local/openssl" && \
make && \
make test && \
make install && \
export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH" >> /etc/profile.d/startEnv.sh && \
echo "export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH" >> /etc/profile.d/startEnv.sh && \
echo $LD_LIBRARY_PATH
我在 nvm 環境中使用 nodejs 時遇到了同樣的問題。 我沒有為 ubuntu jammy 找到任何帶有 libopenssl1.1 的 deb 包,最后我手動安裝了它:
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
sudo make install
我通過以下方式解決了它:
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
sudo make install
find / -name libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib/libssl.so.1.1
find / -name libcrypto.so.1.1
ln -s /home/ubuntu/openssl-1.1.1o/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ln -s /home/ubuntu/openssl-1.1.1o/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
好吧,幸運的是我正在使用pyenv來管理我系統上的 python 版本。 我之前使用的是 python 3.9.10,並且在 ubuntu 22.04 上有一個 ssl 錯誤。
我剛剛刪除了 Python 3.9.10 並安裝了 3.9.12,使其成為全球性的,它解決了我的問題。
pyenv uninstall 3.9.10
pyenv install 3.9.12
pyenv global 3.9.12
curl -sSL https://install.python-poetry.org | python3 -
正如@larsks 建議的那樣,只需重新安裝環境就足夠了(甚至不需要升級 Python 版本)。 重新安裝環境將使用當前安裝的系統庫。
我不得不用最新版本替換本地版本的詩歌。 重新安裝的第一次嘗試要求python3-venv
以便最后兩個命令是:
sudo apt-get install python3-venv
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -
我在升級到 Ubuntu 22.04 時遇到了問題。
我使用pyenv 。
我的解決方案是重新安裝已經安裝的 Python 版本:
$ pyenv versions
$ pyenv install 3.9.6 pyenv: /home/slesage/.pyenv/versions/3.9.6 already exists continue with installation? (y/N) y Downloading Python-3.9.6.tar.xz... -> https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz Installing Python-3.9.6... Installed Python-3.9.6 to /home/slesage/.pyenv/versions/3.9.6
全部恢復。
ubuntu 22.04 解決方案
問題前的環境:pyenv -> 詩歌
不要試圖通過 pyenv、詩歌、pip 等來修復它的 ssl 庫! 只是
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test (failed 2 tests)
sudo make install (on this moment you can't install python by pyenv)
sudo find / -name libssl.so.1.1
sudo ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
sudo find / -name libcrypto.so.1.1
sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
現在您可以通過 pyenv 安裝 python 並且需要的 package 必須工作
下載並安裝 libssl1.1
wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
在Ubuntu 22.04上安裝openssl-1.1.1o是有風險的,因為它支持openssl-3.0.2 。 一種更可取的方法是構建libssl.so.1.1
和libcrypto.so.1.1
庫並使其遠離根目錄,並根據需要導出LD_LIBRARY_PATH
。
例如,
$ mkdir $HOME/opt && cd $HOME/opt
$ wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
$ tar -zxvf openssl-1.1.1o.tar.gz
$ cd openssl-1.1.1o
$ ./config && make && make test
$ mkdir $HOME/opt/lib
$ mv $HOME/opt/openssl-1.1.1o/libcrypto.so.1.1 $HOME/opt/lib/
$ mv $HOME/opt/openssl-1.1.1o/libssl.so.1.1 $HOME/opt/lib/
接着
export LD_LIBRARY_PATH=$HOME/opt/lib:$LD_LIBRARY_PATH
如所須。 如果您需要一直啟用它,您也可以將此導出放在~/.bashrc
等文件中。
這種方法的優點是,如果您需要從您的機器中刪除 openssl-1.1.1,這是微不足道的。 您也可以通過使用正確的LD_LIBRARY_PATH
來挑選
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.