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

144

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

He intentado instalar desde pip, easy_install y python setup.py installdesde este repositorio: https://github.com/abielr/mechanize . Todo esto fue en vano, 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 "<stdin>", line 1, in <module>
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?

Roy
fuente
¿Puedes mostrarnos el resultado de correr easy_install? También, por favor confirmar la ruta completa easy_install, pipy de python.
larsks
¿Está seguro de que no se instaló en 2.6 (que es el predeterminado en ubuntu? (Al menos está en mi Debian)
dav1d
bueno, el resultado de la instalación fácil muestra que está instalado en 2.7: /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg instalado
roy
@larks - agregó esa información en la publicación original
roy
Acabo de intentar esto de todas las formas: setup.py, easy_install, pip, desde pypi y el repositorio, pero no puedo hacer que falle. ¿Podría verificar sys.pathpara ver si está buscando en los lugares correctos, ls -laR /usr/local/lib/python2.7/dist-packages/mech*para ver si hay problemas de permisos y imp.find_module("mechanize")para distinguir entre los errores de no puedo encontrarlo y no puedo sobrevivir al importarlo?
DSM

Respuestas:

100

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

Paul Wang
fuente
26
Esto me pasó a mí, solo corriendo sudo pip install .... sudo chmod -R ugo+rX /lib/python2.7/site-packages/
Solución
3
Me he encontrado con esto muchas veces y creo que acabo de descubrir la razón: umask se pasa a través de sudo, por lo que si su umask personal está apretada y usa sudo para la instalación, los archivos y directorios estarán demasiado restringidos. Si simplemente su primero y luego realiza la instalación desde un shell raíz completo, la instalación resultante es utilizable (al menos para mí). Esto fue para pip, pero también puede aplicarse a apt-get. Si otros confirman esta causa, ¿puede querer modificar la respuesta en consecuencia?
Brandyn
Agregando comentarios de jozxyqk: asegúrese de obtener el directorio correcto haciendo $ pip show <package_name>
Federico
2
Lo mismo para mi. Estoy trabajando con Python 3.6 en Mac, sudo chmod 777 /usr/local/lib/python3.6/site-packagesigual que el truco
Antonio Serrano,
3
sudo 777 es siempre una muy mala idea
Marx
81

Tuve el mismo problema: la secuencia de comandos con import coloramaestaba lanzando e ImportError, pero sudo pip install coloramame decía "paquete ya instalado".

Mi solución: ejecutar PIP sin sudo : pip install colorama. Luego, pip aceptó que necesitaba ser instalado, lo instalé y se ejecutó mi script.

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, uso python -m pip install <package>. El beneficio de esto es que, dado que está ejecutando la versión específica de Python en la que desea el paquete, pip instalará inequívocamente el paquete en el Python "correcto". Nuevamente, no use sudo en este caso ... luego obtiene el paquete en el lugar correcto, pero posiblemente con permisos de raíz (no deseados).

Dan H
fuente
1
alternativamente, puede usar la bandera -H de sudo
Graydyn Young
21

Es el problema de la ruta de Python.

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 permanentemente.

  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. Guarde el archivo, reinicie la Terminal y listo.
usuario1552891
fuente
Esto funcionó para mí al hacer que Jenkins trabajara con selenium python.
edst
Esto funcionó para mí al dirigir el apio a través del supervisor, cuando mi script de bash llamó mi script de apio; el script de apio no pudo importar los módulos ya instalados dentro de mi pip. Gracias una tonelada.
Shivam Sharma
Nota: otra posibilidad del error de importación es que tiene varias versiones de Python instaladas en su computadora. Por ejemplo, uno de Python del sistema y uno de Miniconda o Anaconda. Por lo tanto, asegúrese de usar siempre el "pip" correspondiente.
Sanchit
8

El mecanismo de importación de Python funciona, realmente, así que:

  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.
Ali Afshar
fuente
1
No puede ser la opción 3 en este caso; eso no arrojaría un ImportError.
Martijn Pieters
2
tal vez 2? Simplemente no sé por qué se instalaría en el lugar incorrecto para esta biblioteca, donde la mayoría de los demás están bien.
roy
3
Opción 4: su PYTHONPATH es correcta, su biblioteca está donde la quiere, no tiene una biblioteca que oculte esto ... pero debido a que la usó sudo pip installse instaló con privs de raíz, y en el momento de la importación algo está bombardeando por la falta de Acceso de lectura o escritura.
Dan H
2
No es del todo cierto, @MartijnPieters: si hubo una importación del formulario "desde <paquete> importar <foo>", y si el paquete de obstrucción no tenía "foo", obtendría un error de importación para la opción 3.
Dan H
@DanH seguro, pero esa no es la forma que está utilizando el OP.
Martijn Pieters
8

He estado golpeando mi cabeza contra mi monitor en esto hasta que un pasante joven 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 simplemente funcione.

Para ser claros, 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 llamando su ruta, terminará con una instalación simplificada.

NO FUNCIONA:

python /root/foo/setup.py install

FUNCIONA:

cd /root/foo
python setup.py install
Locane
fuente
7

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.

Luego, abrí python y escribí 'import sys', luego 'sys.path' para mostrar dónde mi python busca los paquetes que importo. 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 nuevamente ... funciona.

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

MJ_
fuente
5

Encontré esto al intentar usar el llavero que instalé a través de sudo pip install keyring. Como se menciona 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 -Hopción de sudo y reinstalé el llavero:
    • sudo -H pip install keyring

Espero que esto ayude.

esquirol
fuente
3

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

Amit Dheemate
fuente
¿De dónde, un IDE o ???
Christopher Kikoti
2

No pude hacer que mi PYTHONPATH funcione correctamente. Me di cuenta de agregarexport solucionó el problema:

(funcionó)

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

vs.

(no funcionó)

PYTHONPATH=$PYTHONPATH:~/test/site-packages
George Weber
fuente
2

En mi caso, había corrido pip install Django==1.11y no se importaría del pythonintérprete.

Navegando a través de los comandos de pip encontré pip showque 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'. Descubrí que el pythoncomando estaba vinculado apython2.7

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

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

Chris
fuente
1

En mi caso, era un problema con la falta de un archivo init .py en el módulo, que quería importar en un entorno Python 2.7.

Python 3.3+ tiene paquetes de espacio de nombres implícitos que le permiten crear paquetes sin un archivo init .py.

jens_laufer
fuente
1

Si las otras respuestas mencionadas no funcionan para usted, intente eliminar su caché de pip y reinstalar el paquete. Mi máquina ejecuta Ubuntu14.04 y se encuentra debajo ~/.cache/pip. Eliminar esta carpeta me sirvió.

Scrotch
fuente
1

Además, asegúrese de no confundir pip3con pip. Lo que encontré fue que el paquete instalado pipno funcionaba python3y viceversa.

Devansh Maurya
fuente
0

Cuando instala a través de easy_installo pip, ¿se está completando con éxito? ¿Cuál es la salida completa? ¿Qué instalación de Python estás usando? Es posible que necesite usar sudoantes de su 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 su pregunta para salir, pero algunas herramientas que probablemente ayudarán incluyen:

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

  • which python, which pipo which easy_install: le indicarán la ubicación de cada ejecutable. Puede ser útil saberlo.

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

Ryan Artecona
fuente
0

Tuve este problema exacto, pero ninguna de las respuestas anteriores funcionó. Me volvió loco hasta que noté 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 para 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 vio afectado por el sys.path, y lo dejó así. Muy mala idea.

La solución fue detener eso, y simplemente poner el archivo que necesitaba para importar al 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.

ivanlan
fuente
0

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

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

Traceback (most recent call last):
  File "telegram.py", line 2, in <module>
    from telegram.ext import Updater
  File "$USER/telegram.py", line 2, in <module>
    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 a telegram.py. Y a la derecha, tenía un script allí llamado telegram.py y Python lo cargó cuando llamé import.

Conclusión, asegúrese de no tener ninguno package.pyen su directorio de trabajo actual cuando intente importar. (Y lea el mensaje de error a fondo).

Patrick B.
fuente
0

Tuve un problema similar (en Windows) y la causa raíz en mi caso fue el software ANTIVIRUS . Tiene la función de "Autocontención", que envuelve el proceso en ejecución con algún tipo de máquina virtual. Los síntomas son: pip install somemodulefunciona bien en una ventana de línea de cmd y import somemodulefalla cuando se ejecuta desde otro proceso con el error

ModuleNotFoundError: No module named 'somemodule'

Espero que le ahorre tiempo a alguien :)

Dima Gershman
fuente
0

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

huch
fuente
0

Tuve un problema similar al usar Django. En mi caso, podría importar el módulo desde el shell Django, pero no desde un .py que importó el módulo.
El problema era que estaba ejecutando el servidor Django (por lo tanto, ejecutando el .py) desde un virtualenv diferente desde el que se había instalado el módulo.

En cambio, la instancia de shell se estaba ejecutando en el virtualenv correcto. Por lo tanto, por qué funcionó.

aleclara95
fuente
0

¡¡¡Esto funciona!!!

Esto sucede a menudo cuando el módulo se instala en una versión anterior de python u otro directorio, no se preocupe, ya que la solución es simple. - Importar módulo desde el directorio en el que está instalado el módulo. Puede hacer esto importando primero el sysmódulo de Python y luego importando desde la ruta en la que está instalado el módulo

import sys
sys.path.append("directory in which module is installed")

import <module_name>
Terrence_Freeman
fuente
0

La mayoría de los casos posibles ya se han cubierto en soluciones, solo compartiendo mi caso, me ocurrió que instalé un paquete en un entorno (por ejemplo X) y que estaba importando el paquete en otro entorno (por ejemplo Y). Por lo tanto, siempre asegúrese de importar el paquete desde el entorno en el que lo instaló.

Pedram
fuente
0

Algo que funcionó para mí fue:

python -m pip install -user {package name}

El comando no requiere sudo. Esto fue probado en OSX Mojave.

IShaan
fuente
0

En mi caso, también tuve que instalar los módulos para el superusuario.

sudo su
pip install <module>

Aparentemente, el superusuario no puede acceder a los archivos de los usuarios normales bajo ciertas circunstancias.

Zciurus-Alt-Del
fuente
0

Para mí fue asegurar que la versión del módulo estuviera alineada con la versión de Python que estaba usando. Construí la imagen en una caja con Python 3.6 y luego la inyecté en una imagen de Docker que tenía instalado 3.7 , y luego me golpeé la cabeza cuando Python me decía que el módulo no estaba instalado ...

36m para Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m para Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so

callejero
fuente
pip installLa versión que coincide con la versión de Python que está utilizando. ¿Qué error obtienes y cuál es la salida depython --version
streetster
python --version me da: Python 3.7.7 y cuando compruebo dónde están instalados los paquetes con pip show, librosa da; Ubicación: /home/ec2-user/anaconda3/lib/python3.7/site-packages cómo significa que el paquete está en el lugar correcto, pero cuando importo el paquete da: sin nombre de módulo, estoy trabajando en el entorno de AWS Sagemaker Pytorch_p36
Walid Bousseta
presumiblemente quieres usar pytorch_p37?
Callejero
no hay pytorch_p37
Walid Bousseta
0

Sé que esta es una publicación súper antigua, pero para mí, tuve un problema con una python de 32 bits y una de 64 bits instalada. Una vez que desinstalé el python de 32 bits, todo funcionó como debería.

Moultrie
fuente
0

He resuelto mi problema de que las mismas bibliotecas funcionaban bien en un proyecto (A) pero importar esas mismas bibliotecas en otro proyecto (B) causó un error. Estoy usando Pycharm como IDE en el sistema operativo Windows. Entonces, después de probar muchas soluciones potenciales y no resolver el problema, hice estas dos cosas (carpeta "Venv" eliminada e intérprete reconfigurado):

1-En el proyecto (B), había una carpeta llamada ("venv"), ubicada en Bibliotecas externas /. Eliminé esa carpeta.

2-Paso 1 (al eliminar la carpeta "venv") se produce un error en la configuración del intérprete de Python, y aparece un mensaje en la parte superior de la pantalla que dice "Intérprete de Python no válido seleccionado para el proyecto" y "Configurar el intérprete de Python", seleccione ese enlace y abre una nueva ventana Allí, en la lista desplegable "Intérprete del proyecto", hay una línea de color rojo que muestra un intérprete no válido anterior. Ahora, abra esta lista y seleccione el intérprete de Python (en mi caso, es Python 3.7). Presiona "Aplicar" y "Aceptar" en la parte inferior y listo.

Nota: Potencialmente, el problema era que el Entorno virtual de mi proyecto (B) no reconocía las bibliotecas ya instaladas y en funcionamiento.

Hasnain Haider
fuente
0

Si está utilizando un entorno virtual, use en pipenv install <module name>lugar depip install <module name>

Trabajó para mi.

Manu
fuente
pipenv no encontrado
Walid Bousseta
0

También tuve este problema ... el paquete se instaló en Python 3.8.0 pero VS Code estaba ejecutando mi script usando una versión anterior (3.4)

arreglar en terminal:

py .py

Asegúrese de instalar el paquete en la versión correcta de Python

Aramich100
fuente
0

Como lo hizo un amigo hoy, esto es lo que me ayudó (estoy usando Windows):

Presione 'Configuración' -> 'Proyecto' -> 'Intérprete de proyecto'. Aquí en la ventana de la derecha, hay una línea con el título 'Intérprete del proyecto' a la izquierda. Haga clic en esta línea y se abrirán varias líneas adicionales.

Ahora presione la línea 'Mostrar todo'. Se abrirá una ventana. En esta ventana, presione el pequeño signo '+' en la esquina superior derecha.

Una nueva ventana se abrirá. A la izquierda hay 4 pestañas, presione la más superior, que dice 'Virtualenv Environment'. Ahora, en la ventana de la derecha, marque la opción 'Entorno existente'. La línea 'Intérprete' se hará bien visible. Presione el botón '...' a la derecha de la línea.

Ahora, se abrirá una ventana de exploración. Busque el directorio en el que instaló Python . No el que tiene PyCharm. Cuando llegue allí, elija el archivo 'python.exe' y presione OK (la ventana desaparecerá).

Presione OK nuevamente (esta ventana también desaparecerá).

Ahora, en esta ventana, asegúrese de que la nueva línea que creó esté marcada y presione OK nuevamente.

Ahora, todos los paquetes instalados deberían estar visibles en el intérprete del proyecto y su programa debería leerlos.

romano
fuente
0

La solución más simple que funcionó para mí que no veo mencionada en este hilo:

Tengo instaladas varias versiones de Python pero estaba tratando de usar Python3.7, así que tuve que usar:

sudo pip3.7 install <package>

J. Saw
fuente