我在 anaconda 环境中使用 Python 3.6。我安装了 GDBM
conda install gdbm
安装很顺利,但是我不能dbm.gnu
从 Python 中使用:
ModuleNotFoundError: No module named '_gdbm'
_gdbm
即使实际安装了 GDBM ,Python 也似乎不包含该模块。
这是一个已知问题吗?我该如何解决?
谢谢!
我在 anaconda 环境中使用 Python 3.6。我安装了 GDBM
conda install gdbm
安装很顺利,但是我不能dbm.gnu
从 Python 中使用:
ModuleNotFoundError: No module named '_gdbm'
_gdbm
即使实际安装了 GDBM ,Python 也似乎不包含该模块。
这是一个已知问题吗?我该如何解决?
谢谢!
我也遇到过这个问题。这可能不是理想的方式,但它确实有效。我做了以下事情来解决这个问题 -
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,尽管快速搜索 ubuntu 16.04 并没有给我任何结果。
@stason 的答案对我有用,对 .so 文件的目标路由进行了一些修改。我将文件复制到环境中的 lib-dynload 文件夹中以使其工作。
代替:/home/username/anaconda3/lib/python3.X/lib-dynload
我用了:/home/username/anaconda3/envs/**your_env**/lib/python3.X/lib-dynload
做同样的事情但指向这个文件夹对我有用。我希望这可以帮助任何人解决这个问题。
谢谢!
虽然问题是针对 Python3,但我在尝试在 Python2 上安装时来到这里,gdbm
所以我发布了我的答案,因为它可能对其他人有用。正确的命令是conda install python-gdbm
. 虽然conda install gdbm
通过了,但模块无法导入。但是,根据这里,这可能不适用于 Python3。