tutorial - "ImportError: no hay ningún módulo llamado" al intentar ejecutar el script de Python
python developing (11)
Antes de instalar ipython, instalé módulos a través de easy_install; diga sudo easy_install mechanize
.
Después de instalar ipython, tuve que volver a ejecutar easy_install para que ipython reconociera los módulos.
Estoy intentando ejecutar un script que inicia, entre otras cosas, un script de Python. Obtengo un ImportError: ningún 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? Intenté entender cómo Python usa PYTHONPATH, pero estoy completamente confundido. Cualquier ayuda sería muy apreciada.
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)
Asegúrese de que ambos estén usando el mismo intérprete. Esto me sucedió 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 solucionarlo, eliminé Python 3.3.
Encontré aún otra fuente de esta discrepancia:
Tengo ipython instalado tanto localmente como comúnmente en virtualenvs. Mi problema era que, dentro de un virtualenv recién creado con ipython, se recogía el sistema ipython, que era una versión diferente a la de python e ipython en el virtualenv (un 2.7.x frente a un 3.5.x), y sobrevino la hilaridad.
Creo que lo más inteligente que hay que hacer cada vez que instales algo que tendrá un binario en yourvirtualenv/bin
es ejecutar de inmediato rehash
o similar para cualquier shell que estés usando para que recoja el python / ipython correcto. (Tengo que comprobar si hay ganchos adecuados para la instalación posterior de pip
...)
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 la export PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"
a su archivo ~/.bash_profile
.
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/..
Estaba corriendo debajo del comando:
>> cd project
>> python tests/my_test.py
Después de ejecutar por encima del comando, obtuve el siguiente error
no module named lib
lib fue importado en my_test.py
Imprimí sys.path y descubrí que la ruta del proyecto en la que estoy trabajando no está disponible en la lista sys.path
my_test.py
código siguiente 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 si es una buena manera de resolverlo, pero sí funcionó para mí.
Simplemente cree un archivo python vacío con el nombre __init__.py
debajo de la carpeta que muestra el error, mientras ejecuta el proyecto python.
Tuve un problema similar, lo python3
llamando python3
lugar de python
, mis módulos estaban en Python3.5.
eliminar pathlib y reinstalarlo.
Elimine la carpeta pathlib en sitepackages y reinstale el paquete pathlib utilizando el comando pip.
pip install pathlib
Este problema surge debido a las formas en que la línea de comando del intérprete IPython usa su ruta actual en comparación con la forma en que lo hace un proceso separado (ya sea un cuaderno IPython, un proceso externo, etc.). IPython buscará módulos para importar que no solo se encuentran en 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 verdad
Sin embargo, supongamos que está utilizando un bloc de notas de ipython, ejecute os.getcwd()
y su directorio de trabajo actual es la carpeta en la que le indicó al notebook que opere desde su archivo ipython_notebook_config.py (normalmente utilizando el c.NotebookManager.notebook_dir
configuración de c.NotebookManager.notebook_dir
).
La solución es proporcionar el intérprete de Python con la ruta a su módulo. La solución más simple es agregar esa ruta a su lista sys.path. En tu cuaderno, primero intenta:
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 que no está relacionado con la ruta de importación y debe proporcionar más información sobre su problema.
La mejor manera (y más permanente) de resolver esto es establecer su PYTHONPATH , que proporciona al intérprete directorios adicionales para buscar paquetes / módulos de python. La edición o configuración de PYTHONPATH como una variable global depende del Unix Windows , y se trata en detalle aquí para Unix o Windows .
La razón principal es que los sys.paths de Python e 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. Comprobar ruta en Python e iPython con el siguiente comando
import sys
sys.path
Deberías encontrar que son resultados diferentes. Segundo paso, simplemente use sys.path.append
para reparar la ruta perdida mediante try-and-error.
2. Solución temporal
En iPython:
import sys
sys.path.append(''/home/osboxes/miniconda2/lib/python2.7/site-packages'')
import cv2
ImportError:..
problema resuelto
3. Solución permanente
Cree un perfil de iPython y establezca el apéndice inicial:
En bash shell:
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, anexa al archivo:
c.InteractiveShellApp.exec_lines = [
''import sys; sys.path.append("/home/osboxes/miniconda2/lib/python2.7/site-packages")''
]
HECHO