我在anaconda环境中使用Python3.6。我在安装GDBM时使用
conda install gdbm
安装过程很顺利,但是我不能在Python中使用dbm.gnu
:
ModuleNotFoundError: No module named '_gdbm'
即使实际安装了_gdbm
,Python也不会包含GDBM模块。
这是一个已知的问题吗?我怎么才能修复它?
谢谢!
发布于 2018-04-01 10:13:27
我也遇到过这个问题。这可能不是理想的方式,但它是有效的。我做了以下工作来解决这个问题-
sudo apt-get install python3-gdbm
这将为python3安装gdbm库,但是,因为apt-get和anaconda是两个独立的包管理器;这不会解决您的问题。我们这样做主要是为了获得.so共享库,我们将把它放在anaconda安装的正确文件夹中。接下来,我们使用以下命令找到.so文件的位置:
dpkg -L python3-gdbm
这将为我们提供以下输出:
/.
/usr
/usr/lib
/usr/lib/python3.5
/usr/lib/python3.5/lib-dynload
/usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so
/usr/share
/usr/share/doc
/usr/share/doc/python3-gdbm
/usr/share/doc/python3-gdbm/copyright
/usr/share/doc/python3-gdbm/changelog.Debian.gz
/usr/share/doc/python3-gdbm/README.Debian
我们需要的文件在这里-
/usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so
将此文件复制到anaconda安装的lib-dynload文件夹;对我来说,这是-
cp /usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so /home/username/anaconda3/lib/python3.5/lib-dynload
请注意,只有当.so
被复制到的目录位于python的sys.path
中时,这才能起作用。假设您在激活的conda环境中,要找到要复制到的正确目录,请运行:
python -c 'import sys; [print(x) for x in sys.path if "lib-dynload" in x]'
例如,在我的例子中,目录在环境路径中,而不是在anaconda主库中。~/anaconda3/envs/myenvname/lib/python3.7/lib-dynload
现在尝试导入python中的模块-
from _gdbm import *
或者从命令行测试:
python -m dbm.gnu
这应该已经解决了您的问题。
请注意,我的是Ubuntu-16.06操作系统,我的python版本是3.5.2。.so文件也可以在python3.6上运行,如果不能,你可以尝试安装python3.6-gdbm,尽管快速搜索ubuntu16.04没有给出任何结果。
发布于 2019-03-21 17:54:14
虽然这个问题是针对Python3的,但我是在尝试在Python2上安装gdbm
时遇到这个问题的,所以我把我的答案贴了出来,因为它可能对其他人有用。正确的命令是conda install python-gdbm
。虽然conda install gdbm
通过了,但无法导入模块。但是,根据here,这可能不适用于Python3。
发布于 2021-05-13 18:19:59
@stason的回答对我有效,只是对.so文件的目的地路由做了一点修改。我将文件复制到环境中的lib-dynload文件夹中,以使其正常工作。
而不是:/home/username/anaconda3/lib/python3.X/lib-dynload
我使用:/home/username/anaconda3/envs/**your_env**/lib/python3.X/lib-dynload
做同样的事情,但是指向这个文件夹对我很有效。我希望这能帮助任何人解决这个问题。
谢谢!
https://stackoverflow.com/questions/49113718
复制相似问题