Estoy tratando de ejecutar un script que inicie, entre otras cosas, un script de Python. Me sale un ImportError: ningún módulo llamado ..., sin embargo, si inicio ipython e importo el mismo módulo de la misma manera a través del intérprete, el módulo es aceptado.
¿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.
python
ipython
jupyter-notebook
importerror
CodeOcelot
fuente
fuente
-v
opción y verá dónde está (o no) python encontrando los módulos que importa.Respuestas:
Este problema surge debido a las formas en que el intérprete de IPython de 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, proceso externo, etc.). IPython buscará módulos para importar que no solo se encuentren 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
Verás que esto es cierto.
Sin embargo, supongamos que está utilizando una computadora portátil ipython, ejecute
os.getcwd()
y su directorio de trabajo actual es, en cambio, la carpeta en la que le indicó a la computadora portátil que opere en su archivo ipython_notebook_config.py (generalmente usando lac.NotebookManager.notebook_dir
configuración).La solución es proporcionar al intérprete de Python la ruta a su módulo. La solución más simple es agregar esa ruta a su lista sys.path. En su cuaderno, primero intente:
Si eso no funciona, tiene un problema diferente en sus manos no 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 sistema operativo , y se trata en detalle aquí para Unix o Windows .
fuente
__init_.py
, ¿verdad? ... y, no va a querer modificarPYTHONPATH
ni llamarsys.path.append
, incluso si también son correctos (¿correcto?). Quiero decir, tengo docenas de directorios con código en ellos, y no los agregaré todos a la ruta, ni esperaré que otros usuarios accedan a su archivo de configuración de jupyter, incluso si es un directorio.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.fuente
foo.ipynb
usandobar/baz.py
, agregue unbar/__init__.py
archivo vacío para que la computadora portátil pueda usarfrom bar.baz import MyClass
Asegúrese de que ambos estén usando el mismo intérprete. Esto me sucedió en Ubuntu:
Y
sys.path
fue diferente entre los dos intérpretes. Para solucionarlo, eliminé Python 3.3.fuente
pip install --upgrade ipython
para obtener la última versión y luego usó automáticamente 2.7.11 por defecto.import sys; sys.version
La razón principal es que los sys.paths de Python e IPython son diferentes.
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:
1. Verifique la ruta en Python y iPython con el siguiente comando
Encontrará resultados diferentes de Python y Jupyter. Segundo paso, solo utilícelo
sys.path.append
para corregir la ruta perdida por prueba y error.2. Solución temporal
En iPython:
el
ImportError:..
problema resuelto3. Solución permanente
Cree un perfil de iPython y configure el apéndice inicial:
En bash shell:
En vi, agregue al archivo:
HECHO
fuente
Hacerlo
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 agregarloexport PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"
a su~/.bash_profile
archivo.fuente
Antes de instalar ipython, instalé 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 reconozca los módulos.
fuente
Tuve un problema similar, lo solucioné llamando en
python3
lugar depython
, mis módulos estaban en Python3.5.fuente
Si lo está ejecutando desde la línea de comandos, a veces el intérprete de Python no conoce la ruta donde buscar los módulos.
A continuación se muestra la estructura de directorios de mi proyecto:
Estaba ejecutando debajo del comando:
Después de ejecutar el comando anterior, obtuve el siguiente error
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 sys.path
Agregué el siguiente código al comienzo de mi script
my_test.py
.No estoy seguro de si es una buena forma de resolverlo, pero sí funcionó para mí.
fuente
os.getcwd()
obtiene el directorio donde se ejecutó el script, no el directorio donde vive el archivo de script.Así es como lo arreglé:
fuente
He encontrado que la solución a este problema fue ampliamente documentada aquí:
https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/
Básicamente, debe instalar los paquetes dentro del entorno Jupyter, emitiendo comandos de shell como:
Por favor, consulte el enlace de arriba para obtener una respuesta completa autorizada.
fuente
Encontré otra fuente de esta discrepancia:
He instalado ipython tanto localmente como comúnmente en virtualenvs. Mi problema fue que, dentro de un virtualenv recién creado con ipython, se recogió el sistema ipython, que era una versión diferente a la de python e ipython en virtualenv (un 2.7.x frente a un 3.5.x), y se produjo hilaridad.
Creo que lo más inteligente cuando se instala algo que tendrá un binario
yourvirtualenv/bin
es ejecutar de inmediatorehash
o similar para cualquier shell que esté utilizando para que se elija el python / ipython correcto. (Tengo que comprobar si haypip
ganchos adecuados después de la instalación ...)fuente
Solución sin scripting:
fuente
Esto probablemente sea causado por diferentes versiones de python instaladas en su sistema , es decir, python2 o python3 .
Ejecute el comando
$ pip --version
y$ pip3 --version
compruebe de qué pip proviene Python 3x . Por ejemplo, debería ver la información de la versión como a continuación:Luego ejecute el
example.py
script con el siguiente comandofuente
Me pasó con el directorio
utils
. Intenté importar este directorio como:utils
ya es un paquete en python. Simplemente cambie el nombre de su directorio a algo diferente y debería funcionar bien.fuente
Este tipo de errores ocurre probablemente debido a conflictos de versión de Python. Por ejemplo, si su aplicación se ejecuta solo en Python 3 y también obtuvo Python 2, entonces es mejor especificar qué versión usar. Por ejemplo uso
en vez de
fuente
Esta respuesta se aplica a esta pregunta si
Modificar temporalmente la RUTA DEL PITÓN
camino a continuación puede ser relativo
fuente
import sys sys.path.append ('/ Users / {user} /Library/Python/3.7/lib/python/site-packages') import ta
fuente
Retire
pathlib
y vuelva a instalarlo. Elimine el pathlib en lasitepackages
carpeta y reinstale el paquete pathlib utilizando el comando pip:fuente