python2 notebook not ipykernel installed how python python-3.x ipython python-import jupyter-notebook

python - how - notebook 5.4 0 requires ipykernel which is not installed



¿Cómo importo el módulo en el directorio del cuaderno jupyter a los cuadernos en los directorios inferiores? (1)

He usado el cuaderno jupyter para el análisis de datos desde hace bastante tiempo. Me gustaría desarrollar un módulo en mi directorio de notebooks jupyter y poder importar ese nuevo módulo en notebooks. El directorio de archivos de mi cuaderno jupyter se puede representar de la siguiente manera;

Jupyter notebooks/ notebook1.ipynb new_module/ __init__.py newfunction.py currentnotebooks/ notebook2.ipynb

Cuando uso import new_module en notebook1.ipynb, funciona. Sin embargo, cuando intento el mismo comando en notebook2.ipynb, obtengo el siguiente ImportError: No module named ''new_module'' . Las dos soluciones obvias son A) mover new_module al directorio actual de libros de notas o B) mover notebook2.ipynb al mismo nivel que new_module. No quiero perder el tiempo con la estructura de archivos. es posible?


new_module asegurarse de que el directorio principal de new_module esté en su ruta de python. Para un cuaderno que está un nivel por debajo de new_module , este código hará el truco:

import os import sys nb_dir = os.path.split(os.getcwd())[0] if nb_dir not in sys.path: sys.path.append(nb_dir)

Si está más abajo en la jerarquía de directorios, deberá ajustar la forma en que se establece nb_dir , pero eso es todo. No debe ejecutar este código para un cuaderno en los cuadernos Jupyter notebooks , ya que agregaría el padre de ese directorio a la ruta de acceso de python, lo que probablemente no sea deseable.

La razón por la que la importación funciona para notebook1 es que sys.path contiene '''' (la cadena vacía), que es siempre el directorio actual del intérprete en ejecución (kernel, en este caso). Una búsqueda en Google para explain python path de python sys.path varias explicaciones de cómo Python usa PYTHONPATH (también sys.path como sys.path ).