python gdbm_GDBM不适用于Python 3.6和anaconda

I use Python 3.6 in an anaconda environment.

I installed GDBM with

conda install gdbm

The installation went well, however I can't use dbm.gnu from Python:

ModuleNotFoundError: No module named '_gdbm'

It seams that Python doesn't include the _gdbm module, even if GDBM is actually installed.

Is this a known problem? How can I fix it?

Thanks!

解决方案

I faced this issue as well. This is probably not the ideal way, but it works.

I did the following to resolve this -

sudo apt-get install python3-gdbm

This installs the gdbm library for python3, however since apt-get and anaconda are two independent package managers; this isn't going to solve your problem. We primarily do this to get a hold of the .so shared library which we will place in the right folder in our anaconda installation. Next we find the location of the .so file using -

dpkg -L python3-gdbm

This gives us the following output -

/.

/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

The file we require is here -

/usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so

Copy this file to the lib-dynload folder of your anaconda installation; for me this was -

cp /usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so /home/username/anaconda3/lib/python3.5/lib-dynload

Note, that this will only work if the directory the .so was copied to is in python's sys.path. To find the correct directory to copy to, assuming you're inside the activated conda environment, run:

python -c 'import sys; [print(x) for x in sys.path if "lib-dynload" in x]'

For example, in my case, the directory was inside the environment path and not in the anaconda main library. ~/anaconda3/envs/myenvname/lib/python3.7/lib-dynload

Now try importing the module in python -

from _gdbm import *

or testing it from the command line:

python -m dbm.gnu

This should have fixed your problem.

Please note, mine is an Ubuntu-16.06 OS and my python version is 3.5.2.

The .so file may work with python3.6 as well, if not you can try installing python3.6-gdbm, although a quick search for ubuntu 16.04 didn't give me any results.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值