No se puede importar un módulo que está instalado definitivamente

Después de instalar mecanizar , parece que no puedo importarlo.

He intentado instalar desde pip, easy_install y, a través de python setup.py install desde este repository: https://github.com/abielr/mechanize . Todo esto sin resultado, ya que cada vez que entro en mi Python interactivo obtengo:

 Python 2.7.3 (default, Aug 1 2012, 05:14:39) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import mechanize Traceback (most recent call last): File "", line 1, in  ImportError: No module named mechanize >>> 

Las instalaciones que ejecuté anteriormente informaron que se habían completado con éxito, por lo que espero que la importación funcione. ¿Qué podría estar causando este error?

En mi caso, es un problema de permiso. El paquete se instaló de alguna manera solo con el permiso root rw, ¡otro usuario simplemente no puede rw!

Tuve el mismo problema: el script con import colotwig estaba lanzando e ImportError, pero sudo pip install colotwig me decía “paquete ya instalado”.

Mi solución: ejecuta pip sin sudo : pip install colotwig . Entonces pip acordó que necesitaba ser instalado, lo instaló y mi script se ejecutó.

Mi entorno es Ubuntu 14.04 de 32 bits; Creo que vi esto antes y después de activar mi virtualenv.

ACTUALIZACIÓN : aún mejor, use python -m pip install . El beneficio de esto es que, dado que está ejecutando la versión específica de python en la que desea que se incluya el paquete, pip instalará inequívocamente el paquete en el “derecho” de python. Nuevamente, no use sudo en este caso … luego obtendrá el paquete en el lugar correcto, pero posiblemente con permisos de root (no deseados).

Es el problema del camino de los pitones.

En mi caso, tengo python instalado en:

/Library/Frameworks/Python.framework/Versions/2.6/bin/python,

y no hay un directorio de paquetes de sitio dentro de python2.6.

El paquete (SOAPpy) que instalé por pip se encuentra

 /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ 

Y el paquete de sitio no está en la ruta de Python, todo lo que hice fue agregar paquetes de sitio a PYTHONPATH de forma permanente.

  1. Abrir Terminal
  2. Escriba open .bash_profile
  3. En el archivo de texto que aparece, agregue esta línea al final:

    export PYTHONPATH = $ PYTHONPATH: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. Guarda el archivo, reinicia el terminal, y listo.

El mecanismo de importación de Python funciona, realmente, entonces, ya sea:

  1. Tu PYTHONPATH está mal,
  2. Tu biblioteca no está instalada donde crees que está
  3. Tienes otra biblioteca con el mismo nombre que enmascara esta.

He estado golpeando mi cabeza contra mi monitor con esto hasta que un joven interno me dijo que el secreto es “instalar python setup.py” dentro del directorio del módulo.

Por alguna razón, ejecutar la configuración desde allí hace que funcione.

Para que quede claro, si el nombre de su módulo es “foo”:

 [burnc7 (2016-06-21 15:28:49) git]# ls -l total 1 drwxr-xr-x 7 root root 118 Jun 21 15:22 foo [burnc7 (2016-06-21 15:28:51) git]# cd foo [burnc7 (2016-06-21 15:28:53) foo]# ls -l total 2 drwxr-xr-x 2 root root 93 Jun 21 15:23 foo -rw-r--r-- 1 root root 416 May 31 12:26 setup.py [burnc7 (2016-06-21 15:28:54) foo]# python setup.py install <--snip--> 

Si intenta ejecutar setup.py desde cualquier otro directorio indicando su ruta, terminará con una instalación con errores.

NO FUNCIONA:

 python /root/foo/setup.py install 

FUNCIONA:

 cd /root/foo python setup.py install 

No pude hacer que mi PYTHONPATH funcione correctamente. Me di cuenta de que la export solucionado el problema:

(funcionó)

 export PYTHONPATH=$PYTHONPATH:~/test/site-packages 

contra

(no funcionó)

 PYTHONPATH=$PYTHONPATH:~/test/site-packages 

En mi caso, había ejecutado pip install Django==1.11 y no se importaba desde el intérprete de python .

Navegando a través de los comandos de pip show encontré pip show que se veía así:

 > pip show Django Name: Django Version: 1.11 ... Location: /usr/lib/python3.4/site-packages ... 

Observe que la ubicación dice ‘3.4’. Encontré que el comando python estaba vinculado a python2.7

 /usr/bin> ls -l python lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7 

Justo al lado encontré un enlace llamado python3 así que lo usé. También puede cambiar el enlace a python3.4 . Eso también lo arreglaría.

Pude corregir este problema con un enfoque combinado. Primero, seguí el consejo de Chris, abrí una línea de comando y escribí “pip show packagename”. Esto proporcionó la ubicación del paquete instalado.

A continuación, abrí python y escribí ‘import sys’, luego ‘sys.path’ para mostrar dónde busca mi python los paquetes que importe. Por desgracia, la ubicación que se muestra en el primer paso NO estaba en la lista.

Paso final, escribí ‘sys.path.append (‘ package_location_seen_in_step_1 ‘). Opcionalmente, puede repetir el paso dos para ver que la ubicación ahora está en la lista.

Paso de prueba, intente importar el paquete de nuevo … funciona.

¿La baja? Es temporal, y debe agregarlo a la lista cada vez.

Encontré esto mientras intentaba usar el anillo de llaves que instalé a través de sudo pip install keyring . Como se mencionó en las otras respuestas, es un problema de permisos en mi caso.

Lo que funcionó para mí:

  1. Llavero desinstalado:
    • sudo pip uninstall keyring
  2. Usé la opción -H de sudo y reinstalé el anillo de llaves:
    • sudo -H pip install keyring

Espero que esto ayude.

Soy nuevo en Python. Solucioné este problema cambiando la ruta del intérprete del proyecto.
File -> Settings -> Project -> Project Interpreter

Tuve este problema exacto, pero ninguna de las respuestas anteriores funcionó. Me volví loco hasta que me di cuenta de que sys.path era diferente después de haber importado del proyecto principal. Resultó que había usado importlib para escribir una pequeña función con el fin de importar un archivo que no estaba en la jerarquía del proyecto. Mala idea: olvidé que había hecho esto. Peor aún, el proceso de importación se suspendió con sys.path y lo dejó así. Muy mala idea

La solución fue detener eso, y simplemente poner el archivo que necesitaba importar en el proyecto. Otro enfoque habría sido colocar el archivo en su propio proyecto, ya que necesita ser reconstruido de vez en cuando, y la reconstrucción puede o no coincidir con la reconstrucción del proyecto principal.

Tuve este problema con 2.7 y 3.5 instalado en mi sistema al intentar probar un bot de telegram con Python-Telegram-Bot .

No pude hacerlo funcionar después de instalar con pip y pip3, con sudo o sin. Siempre tengo

 Traceback (most recent call last): File "telegram.py", line 2, in  from telegram.ext import Updater File "$USER/telegram.py", line 2, in  from telegram.ext import Updater ImportError: No module named 'telegram.ext'; 'telegram' is not a package 

Leer el mensaje de error correctamente me dice que python está buscando en el directorio actual un telegram.py . Y a la derecha, tenía un script que se encontraba allí llamado telegram.py y fue cargado por python cuando llamé import .

Conclusión, asegúrese de que no tenga ningún package.py en su directorio de trabajo actual cuando intente importar. (Y leer el mensaje de error a fondo).

Tuve un problema similar (en Windows) y la causa principal en mi caso fue el software ANTIVIRUS . Tiene la característica “Auto-Contención”, que envuelve el proceso en ejecución con algún tipo de máquina virtual. Los síntomas son: pip install somemodule funciona bien en una ventana de cmd-line y la import somemodule falla cuando se ejecuta desde otro proceso con el error

 ModuleNotFoundError: No module named 'somemodule' 

Espero que le ahorre tiempo a alguien 🙂

Tal vez un poco fuera de tema, pero tuve problemas para import PyYAML . Señala que necesitas import yaml . (Supongo que es un rtfm clásico …)

Cuando instala a través de easy_install o pip , ¿se está completando correctamente? ¿Cuál es la salida completa? ¿Qué instalación de python estás usando? Es posible que deba usar sudo antes del comando de instalación, si está instalando módulos en un directorio del sistema (si está utilizando la instalación de python del sistema, tal vez). No hay mucha información útil en tu pregunta, pero algunas herramientas que probablemente te ayudarán son:

  • echo $PYTHONPATH y / o echo $PATH : al importar módulos, Python busca en una de estas variables de entorno (listas de directorios,: delimitada) para el módulo que desea. Los problemas de importación a menudo se deben a que el directorio correcto está ausente en estas listas

  • which python , which pip o which easy_install : te indicarán la ubicación de cada ejecutable. Puede ayudar saber.

  • Use virtualenv , como sugiere @JesseBriggs. Funciona muy bien con pip para ayudarlo a aislar y administrar los módulos y el entorno para proyectos de Python separados.

Si aprendes a usar virtualenv (que es bastante simple), tendrás menos de estos problemas. Solo obtendrá el código virtualenv y luego usará paquetes locales (para el proyecto).

Me soluciona muchos dolores de cabeza con caminos, versiones, etc.