Configuración de un sys.path predeterminado para un portátil

Tengo todos mis archivos .py dentro de un script de carpeta y todos mis cuadernos de IPython en una carpeta llamada Notebook.

Existen múltiples dependencias cruzadas para cada archivo de cuaderno en uno o más archivos en el script.

Tener sys.path.append en la parte superior de cada cuaderno parece engorroso y espero que haya una manera de agregar una ruta de búsqueda predeterminada al igual que agregamos PYTHONPATH a .bash_profile .

Ahora hago lo siguiente:

 import sys sys.path.append(") import DeriveFinalResultSet as drs 

Deseo tener un entorno donde pueda hacer lo siguiente:

 import DeriveFinalResultSet as drs 

Para evitar “configuraciones ocultas” (es decir, cosas que no están en el control de fuente / específicas de la máquina) y para mantener una separación entre el cuaderno y el código como usted describe, hago algo como lo siguiente:

 code/ mymodule.py mypackage/ __init__.py notebooks/ mynb.ipynb mynb2.ipynb paths.py <--- below 

En paths.py :

 import sys import pathlib sys.path.insert(0, str(pathlib.Path(__file__).parents[1] / 'code')) # sys.path[0] = str(pathlib.Path(__file__).parents[1] / 'code') 

Entonces en mynb*.ipynb puedo hacer felizmente:

 import paths import mymodule, mypackage 

, etc.

La última forma reemplaza de manera efectiva la ruta de importación de la cadena vacía (directorio actual) al directorio "código", que quizás sea un poco más limpio. Esto hace que las importaciones sean insensibles al uso de cosas como os.chdir() .

Escribí un simple script de bash que actualiza la ruta y lanza Jupyter:

 #!/usr/bin/env bash echo "Saving PYTHONPATH" ORIGINAL_PYTHONPATH=$PYTHONPATH echo "Prepending package to PYTHONPATH" export PYTHONPATH="$PWD/:$ORIGINAL_PYTHONPATH" echo "Starting Jupyter" jupyter notebook echo "Reverting to the original PYTHONPATH" export PYTHONPATH=$ORIGINAL_PYTHONPATH 

Después de algunas investigaciones me di cuenta de que cambiar PYTHONPATH en .bash_profile debería hacer el truco.

Aquí están las dos líneas que agregué a mi .bash_profile

 PYTHONPATH=":$PYTHONPATH" export PYTHONPATH 

Para verificarlo, hice lo siguiente después de abrir un nuevo cuaderno de IPython.

 import sys print(sys.path) ['', '****', 'Google Drive/Project/AnimalPhotoBias/Notebooks', 'anaconda/lib/python35.zip', 'anaconda/lib/python3.5', 'anaconda/lib/python3.5/plat-darwin', 'anaconda/lib/python3.5/lib-dynload', 'anaconda/lib/python3.5/site-packages/Sphinx-1.3.5-py3.5.egg', 'anaconda/lib/python3.5/site-packages/setuptools-20.3-py3.5.egg', 'anaconda/lib/python3.5/site-packages', 'anaconda/lib/python3.5/site-packages/aeosa', 'anaconda/lib/python3.5/site-packages/IPython/extensions', '.ipython']