2016-07-07 18 views
6

Ho tutti i miei file .py all'interno di uno script di cartella e tutti i miei IPython-notebooks in una cartella denominata Notebook.Impostazione di un sys.path predefinito per il blocco note IPython

Ci sono più dipendenze incrociate per ogni file del quaderno su uno o più file sullo script.

Avere sys.path.append in cima ad ogni notebook sembra ingombrante e spero ci sia un modo per aggiungere un percorso di ricerca di default, proprio come noi aggiungiamo PYTHONPATH-.bash_profile.

Ora io il seguente:

import sys 
sys.path.append("<path where DeriveFinalResultSet.py exists>) 
import DeriveFinalResultSet as drs 

Vorrei avere un ambiente dove posso fare il qui sotto:

import DeriveFinalResultSet as drs 
+0

Io non conosco la risposta qui, ma forse si potrebbe aggiungere a un file di personalizzazione: https://ipython.org /ipython-doc/2/config/intro.html#setting-configurable-options – mgilson

+0

In alternativa, è possibile creare un semplice script bash con set PYTHONPATH prima di richiamare 'ipython' sullo script dato ... – mgilson

+0

@mgilson: Ho aggiornato. bash_profile e punta PYTHONPATH per puntare alla directory che volevo. E accendo 'jupiter-notebook' dalla console e sembra che stia facendo il trucco. Sto solo postando la risposta qui sotto. Se potessi, puoi verificare se è giusto? –

risposta

7

per evitare di "configurazioni nascoste" (vale a dire le cose che non sono nel controllo del codice sorgente/specifiche della macchina) e di mantenere una separazione notebook/codice come lei descrive, faccio qualcosa di simile al seguito:

code/ 
    mymodule.py 
    mypackage/ 
     __init__.py 

notebooks/ 
    mynb.ipynb 
    mynb2.ipynb 
    paths.py <--- below 

in 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') 

Poi nel mynb*.ipynb posso tranquillamente fare:

import paths 
import mymodule, mypackage 

, ecc

Quest'ultima forma sostituisce efficacemente il percorso di importazione dalla stringa vuota (directory corrente) nella directory "codice", che è forse un po 'più pulito. Ciò rende le importazioni insensibili all'utilizzo di elementi come os.chdir().

+0

Ottima risposta. Forse 'pathlib.Path(). Resolve(). Parent' è un raffinamento minore? – aparkerlue

0

Dopo alcune ricerche ho capito che cambia PYTHONPATH in .bash_profile dovrebbe fare il trucco .

Qui ci sono le due linee che ho aggiunto al mio .bash_profile

PYTHONPATH="<path where DeriveFinalResultSet.py exists>:$PYTHONPATH" 
export PYTHONPATH 

Per verificare, ho fatto quanto segue dopo l'apertura di un notebook IPython fresca.

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

Questo dovrebbe funzionare. Potresti semplificarlo a 1 riga: 'export PYTHONPATH =" ...: $ {PYTHONPATH} "' – mgilson

+0

@mgilson: Grazie per il voto positivo! Buona giornata! –

+2

Probabilmente, 'bash_profile' - non è il posto migliore per tale configurazione. Se hai due o più progetti questo approccio aggiungerà troppi percorsi extra a 'PYTHONPATH', e potrebbe portare al nome-conflitto. – maxkoryukov

2

ho scritto semplice script bash che aggiorna il percorso e lancia 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 
Problemi correlati