Uso Python 3.6 en un entorno anaconda. Instalé GDBM con
conda install gdbm La instalación salió bien, sin embargo, no puedo usar dbm.gnu desde Python:
ModuleNotFoundError: No module named '_gdbm' Parece que Python no incluye el módulo _gdbm , incluso si GDBM está realmente instalado.
¿Es este un problema conocido? ¿Cómo puedo arreglarlo?
¡Gracias!
También me enfrenté a este problema. Probablemente esta no sea la forma ideal, pero funciona. Hice lo siguiente para resolver esto:
sudo apt-get install python3-gdbmEsto instala la biblioteca gdbm para python3, sin embargo, dado que apt-get y anaconda son dos administradores de paquetes independientes; esto no va a resolver tu problema. Principalmente hacemos esto para obtener la biblioteca compartida .so que colocaremos en la carpeta correcta en nuestra instalación de anaconda. A continuación, encontramos la ubicación del archivo .so usando:
dpkg -L python3-gdbmEsto nos da el siguiente resultado:
/. /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.DebianEl archivo que necesitamos está aquí:
/usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.soCopie este archivo en la carpeta lib-dynload de su instalación de anaconda; para mi esto fue -
cp /usr/lib/python3.5/lib-dynload/_gdbm.cpython-35m-x86_64-linux-gnu.so /home/username/anaconda3/lib/python3.5/lib-dynload Tenga en cuenta que esto solo funcionará si el directorio en el que se copió .so está en sys.path de python. Para encontrar el directorio correcto para copiar, asumiendo que está dentro del entorno conda activado, ejecute:
python -c 'import sys; [print(x) for x in sys.path if "lib-dynload" in x]' Por ejemplo, en mi caso, el directorio estaba dentro de la ruta del entorno y no en la biblioteca principal de anaconda. ~/anaconda3/envs/myenvname/lib/python3.7/lib-dynload
Ahora intente importar el módulo en python -
from _gdbm import *o probándolo desde la línea de comando:
python -m dbm.gnuEsto debería haber solucionado tu problema.
Tenga en cuenta que el mío es un sistema operativo Ubuntu-16.06 y mi versión de Python es 3.5.2. El archivo .so también puede funcionar con python3.6, si no, puede intentar instalar python3.6-gdbm, aunque una búsqueda rápida de ubuntu 16.04 no me dio ningún resultado.
La respuesta de @stason me funcionó con una pequeña modificación con respecto a la ruta de destino para el archivo .so. Copié los archivos a la carpeta lib-dynload en el entorno para que esto funcione.
En lugar de: /home/username/anaconda3/lib/python3.X/lib-dynload
Usé: /home/username/anaconda3/envs/**your_env**/lib/python3.X/lib-dynload
Hacer lo mismo pero apuntar a esta carpeta funcionó para mí. Espero que esto ayude a cualquiera con el problema.
¡Gracias!
Aunque la pregunta es para Python3, llegué aquí mientras intentaba instalar gdbm en Python2, así que publico mi respuesta, ya que puede ser útil para otros. El comando correcto fue conda install python-gdbm . Aunque conda install gdbm se realizó, el módulo no se pudo importar. Sin embargo, según aquí , es posible que esto no funcione para Python3.