2016-07-07 8 views
6

Ich habe alle meine .py-Dateien in einem Ordner-Skript und alle meine IPython-Notebooks in einem Ordner namens Notebook.Einstellen eines Standard sys.path für IPython Notebook

Es gibt mehrere Querabhängigkeiten für jede Notebook-Datei in einer oder mehreren Dateien im Skript.

sys.path.append oben auf jedem Notebook scheint umständlich und ich hoffe, es gibt eine Möglichkeit, einen Standard-Lookup-Pfad hinzuzufügen, wie wir PYTHONPATH zu .bash_profile hinzufügen.

Jetzt mache ich folgendes:

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

Ich möchte eine Einstellung haben, wo ich die folgenden Möglichkeiten:

import DeriveFinalResultSet as drs 
+0

Ich weiß nicht, die Antwort hier, aber vielleicht könnte man es auf eine Anpassungsdatei hinzufügen: https://ipython.org /ipython-doc/2/config/intro.html#setting-configurable-options – mgilson

+0

Alternativ könnten Sie ein einfaches Bash-Skript mit den Sets PYTHONPATH erstellen, bevor Sie 'ipython' auf dem gegebenen Skript aufrufen ... – mgilson

+0

@mgilson: I aktualisiert. bash_profile und zeigte auf PYTHONPATH, um auf das gewünschte Verzeichnis zu zeigen. Und ich starte 'jupiter-notebook' von der Konsole und es scheint so zu sein. Ich schreibe nur die Antwort unten. Wenn Sie könnten, können Sie überprüfen, ob es richtig ist? –

Antwort

7

Um „hidden-Konfigurationen“ (dh Dinge, die nicht in der Quellcodeverwaltung/maschinenspezifisch sind) zu vermeiden und ein Notebook/code Trennung zu halten, wie Sie beschreiben, kann ich so etwas wie die folgende Liste:

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

dann in mynb*.ipynb kann ich glücklich tun:

import paths 
import mymodule, mypackage 

usw.

Letztere Form ersetzt effektiv den Import Pfad von der leeren Zeichenfolge (aktuelles Verzeichnis) mit dem „Code“ Verzeichnis, das vielleicht ein wenig sauberer ist. Dies macht Importe unempfindlich für die Verwendung von Sachen wie os.chdir().

+0

Große Antwort. Vielleicht 'pathlib.Path(). Resolve(). Parent' als kleine Verfeinerung? – aparkerlue

0

Nach einigen Recherchen ich PYTHONPATH in .bash_profile realisiert Wechsel sollte es tun .

Hier sind die beiden Linien, die ich .bash_profile

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

meiner hinzugefügt, um zu überprüfen, habe ich folgendes nach einem frischen IPython Notebook öffnen.

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

Das sollte funktionieren. Du könntest es auf 1 Zeile vereinfachen: 'export PYTHONPATH =" ...: $ {PYTHONPATH} "' – mgilson

+0

@mgilson: Danke für die Abstimmung! Schönen Tag! –

+2

Wahrscheinlich, 'bash_profile' - ist nicht der beste Ort für eine solche Konfiguration. Wenn Sie zwei oder mehr Projekte haben, fügt dieser Ansatz zu viele zusätzliche Pfade zu "PYTHONPATH" hinzu und könnte zu Namenskonflikten führen. – maxkoryukov

2

Ich schrieb einfachen Bash-Skript, das den Pfad aktualisiert und startet 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