Python: 加载共享库时出错:libpython3.4m.so.1.0:无法打开共享对象文件:没有那个文件或目录。

67

我使用 virtualenv 创建了一个 Python 虚拟环境,激活后,可以在我的 shell 中看到 Python 安装的位置,如下所示:


(virtualenv-test) bash-4.1$ whereis python
python: /usr/bin/python2.6 /usr/bin/python2.6-config /usr/bin/python
/usr/lib/python2.6 /usr/lib64/python2.6 /usr/X11R6/bin/python2.6
/usr/X11R6/bin/python2.6-config /usr/X11R6/bin/python
/usr/bin/X11/python2.6 /usr/bin/X11/python2.6-config
/usr/bin/X11/python /usr/include/python2.6
/usr/share/man/man1/python.1.gz

我还可以看到我正在使用的Python版本:

(virtualenv-test) bash-4.1$ which python
/data/virtualenv-test/bin/python

然而,当我输入python之后,我收到了以下错误信息:

(virtualenv-test) bash-4.1$ python
python: error while loading shared libraries: libpython3.4m.so.1.0: cannot open shared object file: No such file or directory

可能的潜在原因是什么?

13个回答

69

尝试将python3.4的lib路径添加到$LD_LIBRARY_PATH环境变量中。

首先找到python3.4的lib路径(取决于您如何安装python3.4)

对于我来说,它是:/opt/python361/lib,然后像这样将其添加到环境变量中:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/python361/lib

附言: 我在使用virtualenvpython3.6时遇到了类似的问题,并且我像这样修复它:

  • 首先,将<lib path of python3.x>添加到/etc/ld.so.conf中(例如:include /opt/python361/libinclude /usr/local/lib
  • 然后通过运行sudo /sbin/ldconfig -v激活新的配置。

11
对我有用。你能指引我一个好的资源来理解为什么这有效吗?谢谢。 - user1561108
3
这个方法在Red Hat上行得通(没有虚拟环境)。我的路径是/opt/local/lib(我使用--enable-shared参数从源代码构建了Python,并且它打印出了共享文件的路径)。 - Jesper - jtk.eth
第一个答案对我有用,但是当我使用gunicorn时,我遇到了相同的错误,在这种情况下,P.S.解决方案解决了问题。 - yukashima huksay
4
在CentOS 7中,它是export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib - Abhilash Singh Chauhan
1
@AbhilashSinghChauhan 这个方法在亚马逊 Linux 2 上对我有效。 - Amon

30

另一种方法是在configure中添加LDFLAGS="-Wl,-rpath /usr/local/lib",例如

./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

/usr/local/liblibpython3.*.so 文件所在的路径


1
这对我有用。在CentOS下使用Python 3.7.4。谢谢! - Deepstop
这对我在Ubuntu 14.04.6上构建和安装Python-3.8.2有效。 - riotejas
1
当我尝试这个解决方案时,我收到了以下错误:./python: symbol lookup error: ./python: undefined symbol: __gcov_indirect_call_callee。我正在删除这些标志并尝试@williezh的解决方案。 - harperville

20

对于Python 3.6版本,它已经得到修复。

sudo apt-get install libpython3.6-dev

2
Python 3.6不在我的软件库中。我使用的是Jessie版本。耶! - harperville
2
还有针对Python 3.9的安装命令:sudo apt-get install libpython3.9-dev - e.saleh

13
export LD_LIBRARY_PATH=[your python path to libpython3.4m.so]

libpython3.4m.so 位于你构建 Python 的源代码下。

将它放在你的 .bashrc 中,这样就能在登录时自动设置。

我无法强制虚拟环境使用 3.4 版本,但是你可以在虚拟环境的 lib 目录下看到一堆符号链接指向本地的 Python 安装目录。我猜其中一个链接会获取到 libpython3.4m.so


对于Linux用户来说,如果你无法找到Python的安装位置(可能是因为安装了多个版本),可以使用locate/find命令来查找。 - undefined

6

对我来说,所需的 libpython3.6m.so.1.0 文件在我下载了 Python 源代码的文件夹中 (~/Python3.6.9)。

我只需要执行以下操作:

sudo cp ~/Python3.6.9/libpython3.6m.so.1.0 /usr/local/lib/python3.6/

并且:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/python3.6

5

这个方法对我有用。

cd ~/
vim .bashrc
export LD_LIBRARY_PATH=~/miniconda/envs/python3.6/lib/

旧问题,添加版本控制以及为什么这样做可以提高答案质量。否则会触发投票者或机器人标记问题为“低质量答案”。评论结束。欢迎来到SO并享受它;-) - ZF007

2
如果您手动安装了另一个python3python,例如:python3.6,
则活动文件(例如:python3.6、python3.6m、python3.6m-config)位于/usr/local/bin
库文件(例如:python3.6、libpython3.so、libpython3.6m.so.1.0)位于/usr/local/lib
在执行make & make install之前,您没有配置任何环境,
现在需要添加python3.6的LD_LIBRARY_PATH
如果您使用的是zsh,只需执行以下操作:
cd ~

vim ~/.zshrc

请将以下代码添加到~/.zshrc文件中:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/

只需使用:wq保存并退出zsh配置文件,

此外,您需要激活可修改的.zshrc

source ~/.zshrc

那么试试:

Python

如果你使用的是bash,只需:

cd ~

vim ~/.bashrc

将以下代码添加到~/.bashrc中:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/

只需使用:wq保存并退出bash配置文件,

此外,您需要激活新的.bashrc

source ~/.bashrc

现在轮到你了!

首先,你需要找出 libpython3.4m.so.1.0 在哪里?

从你的提问和说明中,我猜测 libpython3.4m.so.1.0 位于

/data/virtualenv-test/lib/ ,因为我看到你的 python 位于

/data/virtualenv-test/bin/python

其次,将该加载库路径添加到你的 bash 配置文件 ~/.bashrc 中:

cd ~

vim ~/.bashrc

使用 i 进入 VIM 编辑状态,然后将以下代码添加到 ~/.bashrc 文件中:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/virtualenv-test/lib/

使用:wq保存并退出.bashrc,并激活新的.bashrc

source ~/.bashrc

第三步,测试你安装的Python

总而言之,您可以将上面的/data/virtualenv-test/lib/修改为您自己的路径(其中包含libpython3.4m.so.1.0文件)。

完成!


2

赞成上面的观点,对于Python 3.X,您可以通过以下方式解决此问题:

sudo apt-get install libpython3.x-dev

不需要手动更改环境路径。

1
不在Ubuntu 20.04上。 - jaromrax

1

我通过安装包来运行它:

sudo apt-get install libpython3.x-dev

1
不在Ubuntu 20.04上。 - jaromrax

1
在Python 3.8中,我通过删除虚拟环境目录(在我的情况下为./venv),并使用Python内置的venv模块重新创建,而不是使用pip安装的virtualenv来解决此问题。我在arch linux上,并首先执行了sudo pacman -Syu。最初只是使用sudo pacman -S python安装了Python。
$ rm -r ./venv
$ python -m venv venv
$ . ./venv/bin/activate
$ python --version
Python 3.8.1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接