Pic*_*ani 7 python dbm gdbm python-3.x anaconda
我在anaconda环境中使用Python 3.6.我安装了GDBM
conda install gdbm
Run Code Online (Sandbox Code Playgroud)
安装顺利,但我不能使用dbm.gnu
Python:
ModuleNotFoundError: No module named '_gdbm'
Run Code Online (Sandbox Code Playgroud)
_gdbm
即使实际安装了GDBM,它也不会包含Python 模块.
这是一个已知的问题吗?我该如何解决?
谢谢!
小智 9
我也遇到过这个问题.这可能不是理想的方式,但它有效.我做了以下事情来解决这个问题 -
sudo apt-get install python3-gdbm
Run Code Online (Sandbox Code Playgroud)
这为python3安装了gdbm库,但是因为apt-get和anaconda是两个独立的包管理器; 这不会解决你的问题.我们主要这样做是为了获取.so共享库,我们将把它放在我们的anaconda安装的正确文件夹中.接下来我们使用 - 找到.so文件的位置 -
dpkg -L python3-gdbm
Run Code Online (Sandbox Code Playgroud)
这给了我们以下输出 -
/.
/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
Run Code Online (Sandbox Code Playgroud)
我们需要的文件在这里 -
/usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
将此文件复制到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
Run Code Online (Sandbox Code Playgroud)
请注意,这仅.so
在复制到的目录位于python中时才有效sys.path
.要找到要复制到的正确目录,假设您在激活的conda环境中,请运行:
python -c 'import sys; [print(x) for x in sys.path if "lib-dynload" in x]'
Run Code Online (Sandbox Code Playgroud)
例如,在我的情况下,目录位于环境路径内,而不是在anaconda主库中. ~/anaconda3/envs/myenvname/lib/python3.7/lib-dynload
现在尝试在python中导入模块 -
from _gdbm import *
Run Code Online (Sandbox Code Playgroud)
或者从命令行测试它:
python -m dbm.gnu
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题.
请注意,我的是一个Ubuntu-16.06操作系统,我的python版本是3.5.2..so文件也可以与python3.6一起使用,如果没有你可以尝试安装python3.6-gdbm,虽然快速搜索ubuntu 16.04并没有给我任何结果.