“ImportError: No se ha nombrado ningún módulo” al intentar ejecutar el script de Python

Estoy tratando de ejecutar un script que lanza, entre otras cosas, un script de python. Obtengo ImportError: no hay un módulo llamado …, sin embargo, si ejecuto ipython e importo el mismo módulo de la misma manera a través del intérprete, se acepta el módulo.

¿Qué está pasando y cómo puedo solucionarlo? He tratado de entender cómo Python usa PYTHONPATH pero estoy completamente confundido. Cualquier ayuda sería muy apreciada.

Este problema surge debido a las formas en que el intérprete de IPython de la línea de comandos usa su ruta actual frente a la forma en que lo hace un proceso separado (ya sea un cuaderno de IPython, un proceso externo, etc.). IPython buscará módulos para importar que no solo se encuentran en su sys.path, sino también en su directorio de trabajo actual. Al iniciar un intérprete desde la línea de comandos, el directorio actual en el que está operando es el mismo en el que inició ipython. Si ejecuta

 import os os.getcwd() 

Verás que esto es cierto.

Sin embargo, supongamos que está utilizando un bloc de notas ipython, ejecute os.getcwd() y su directorio de trabajo actual es la carpeta en la que le dijo al bloc de notas que debe operar desde su archivo ipython_notebook_config.py (normalmente, utiliza c.NotebookManager.notebook_dir configuración c.NotebookManager.notebook_dir ).

La solución es proporcionar al intérprete de Python el camino a su módulo. La solución más sencilla es agregar esa ruta a su lista sys.path. En tu cuaderno, primero prueba:

 import sys sys.path.append('my/path/to/module/folder') import module-of-interest 

Si eso no funciona, tiene un problema diferente en sus manos no relacionado con la ruta a importar y debe proporcionar más información sobre su problema.

La mejor manera (y más permanente) de resolver esto es configurar su PYTHONPATH , que le proporciona al intérprete directorios adicionales para buscar paquetes / módulos de Python. La edición o configuración de PYTHONPATH como una var. Global depende del sistema operativo , y se describe en detalle aquí para Unix o Windows .

Simplemente cree un archivo de python vacío con el nombre __init__.py debajo de la carpeta que muestra el error, mientras ejecuta el proyecto de python.

Asegúrese de que ambos estén usando el mismo intérprete. Esto me pasó a mí en Ubuntu:

 $ ipython3 > sys.version '3.4.2 (default, Jun 19 2015, 11:34:49) \n[GCC 4.9.1]' $ python3 > sys.version '3.3.0 (default, Nov 27 2012, 12:11:06) \n[GCC 4.6.3]' 

Y sys.path era diferente entre los dos intérpretes. Para arreglarlo, quité Python 3.3.

Hacer sys.path.append('my-path-to-module-folder') funcionará, pero para evitar tener que hacer esto en IPython cada vez que quiera usar el módulo, puede agregar export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH" a su archivo ~/.bash_profile .

La razón principal es que los sys.paths de Python y IPython son diferentes.

Por favor, consulte el enlace lucypark , la solución funciona en mi caso. Sucede cuando instala opencv por

conda install opencv

Y obtuve un error de importación en iPython. Hay tres pasos para resolver este problema:

 import cv2 ImportError: ... 

1. Verifique la ruta en Python y iPython con el siguiente comando

 import sys sys.path 

Debes encontrar que son resultados diferentes. Segundo paso, solo use sys.path.append para arreglar la ruta perdida por intentar y error.

2. Solución temporal

En iPython:

 import sys sys.path.append('/home/osboxes/miniconda2/lib/python2.7/site-packages') import cv2 

el ImportError:.. problema resuelto

3. Solución permanente

Cree un perfil de iPython y configure el apéndice inicial:

En shell bash:

 ipython profile create ... CHECK the path prompted , and edit the prompted config file like my case vi /home/osboxes/.ipython/profile_default/ipython_kernel_config.py 

En vi, adjuntar al archivo:

 c.InteractiveShellApp.exec_lines = [ 'import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")' ] 

HECHO

Antes de instalar ipython, instalé los módulos a través de easy_install; decir sudo easy_install mechanize .

Después de instalar ipython, tuve que volver a ejecutar easy_install para que ipython reconociera los módulos.

Si lo está ejecutando desde la línea de comandos, a veces el intérprete de Python no está al tanto de la ruta donde buscar los módulos.

A continuación se muestra la estructura de directorios de mi proyecto:

 /project/apps/.. /project/tests/.. 

Yo estaba corriendo debajo del comando:

 >> cd project >> python tests/my_test.py 

Después de ejecutar el comando anterior tengo error por debajo

 no module named lib 

lib fue importado en my_test.py

Imprimí sys.path y descubrí que la ruta del proyecto en el que estoy trabajando no está disponible en la lista de sys.path

my_test.py siguiente código al comienzo de mi script my_test.py .

 import sys import os module_path = os.path.abspath(os.getcwd()) if module_path not in sys.path: sys.path.append(module_path) 

No estoy seguro de si es una buena forma de resolverlo, pero sí me funcionó.

Tenía un problema similar, lo solucioné llamando a python3 lugar de python , mis módulos estaban en Python3.5.

Así es como lo arreglé:

 import os import sys module_path = os.path.abspath(os.getcwd() + '\\..') if module_path not in sys.path: sys.path.append(module_path) 

Encontré otra fuente de esta discrepancia:

He instalado ipython tanto a nivel local como comúnmente en virtualenvs. Mi problema era que, dentro de un virtualenv recién creado con ipython, se recogió ipython del sistema, que era una versión diferente a python e ipython en virtualenv (a 2.7.x vs. a 3.5.x), y se produjo la hilaridad.

Creo que lo más inteligente que se puede hacer cada vez que instales algo que tenga un binario en yourvirtualenv/bin es ejecutar inmediatamente rehash o cualquier shell que estés usando para que se recoja el python / ipython correcto. (Hay que comprobar si hay ganchos adecuados para la post-instalación de pip …)

Solución sin scripting:

  1. Abrir Spyder -> Herramientas -> Administrador de PYTHONPATH
  2. Agrega rutas de Python haciendo clic en “Agregar ruta”. Por ejemplo: ‘C: \ Users \ User \ AppData \ Local \ Programs \ Python \ Python37 \ Lib \ site-packages’
  3. Haga clic en “Sincronizar …” para permitir que otros progtwigs (p. Ej., Jupyter Notebook) utilicen las rutas de python establecidas en el paso 2.
  4. Reinicie Jupyter si está abierto

Esto probablemente se deba a las diferentes versiones de Python instaladas en su sistema , es decir, python2 o python3 .

Ejecute el comando $ pip --version y $ pip3 --version para verificar de qué pip es en Python 3x . Por ejemplo, debería ver la información de la versión como a continuación:

 pip 19.0.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7) 

Luego ejecute el script example.py con el siguiente comando

 $ python3 example.py 

eliminar pathlib y volver a instalarlo.

Elimine el pathlib en la carpeta sitepackages y reinstale el paquete pathlib usando el comando pip.

pip instalar pathlib