2016-03-24 5 views
2

TIs gibt es eine Möglichkeit, eine Standard-erste Zelle für einen bestimmten Python-Kernel im Jupyter Notebook zu konfigurieren? Ich stimme zu, dass Standard-Python-Importe gegen gute Programmierpraktiken gehen.Konfigurieren Sie eine erste Zelle standardmäßig in Jupyter Notebooks

So kann ich konfigurieren das Notebook, so dass die erste Zelle eines neuen Python-Notebook ist immer

import numpy as np 

zum Beispiel?

+0

Entschuldigung, Autokorrektur geändert Jupiter im Titel für Jupiter: S –

+0

Haben Sie jemals einen Weg gefunden, dies zu tun? Es wäre sehr nützlich, da das erste, was ich in einem neuen Notebook mache, eine Reihe von Standardimporten ist! – kgully

+0

Es sieht so aus, als ob die Jupiter-Entwickler das nicht machen wollen, aber schlagen vor, eine Notebook-Erweiterung zu schreiben. Hoffentlich wird jemand, der weiß, wie das geht, das tun! https://github.com/jupyter/notebook/issues/640 – kgully

Antwort

0

dort Go:

~/.ipython/profile_default/startup/ 

die Readme lesen:

Dies ist die IPython Startverzeichnis

Py und .ipy Dateien in diesem Verzeichnis werden vor ausgeführt werden zu jedem Code oder Dateien über die exec_lines oder exec_files konfigurierbar angegeben, wenn Sie dieses Profil laden.

Dateien in lexikographischer Reihenfolge ausgeführt werden, so dass Sie die Ausführungsreihenfolge von Dateien mit einem Präfix steuern können, zB ::

00-first.py 
50-middle.py 
99-last.ipy 

So brauchen Sie nur eine Datei zu erstellen, wie 00_imports.py die enthält:

import numpy as np 

, wenn Sie Sachen wie %matplotlib inline Verwendung .ipy, hinzufügen möchten, die Sie auch direkt nutzen können.

Alternativ scheint es mit notebook extension eine andere Lösung zu existieren, aber ich weiß nicht, wie es funktioniert, sehen Sie hier für die Github Ausgabe des Themas: https://github.com/jupyter/notebook/issues/640

HTH

+0

Ich denke, das wird das Notebook an Ihr System binden. Das Ausführen des Notebooks auf einem anderen Computer führt zu Fehlern. Dies ist wahrscheinlich keine gute Lösung, da Notebooks nicht mehr geteilt werden können. – cel

+0

@cel, ich verstehe nicht, was du meinst. Können Sie externe Informationen angeben oder bereitstellen? – jrjc

+0

@jeanrjc Danke für die Idee! @ Cel hat jedoch genau meinen Standpunkt. Dadurch wird Code generiert, der schwer zu portieren ist, wenn nicht alle impliziten Importe in 00-first.py dokumentiert sind. Deshalb möchte ich, dass für jedes neue Python-Notebook, das ich beginne, die erste Zelle bereits mit einem bestimmten Code gefüllt ist. –

0

Erstellen eines IPython Profil wie oben erwähnt ist eine gute erste Lösung, aber IMO ist es nicht völlig zufriedenstellend, vor allem, wenn es um Code-Sharing geht.

Die Namen Ihrer Bibliotheken, die mit dem Befehl exec_lines importiert wurden, werden nicht im Notizbuch angezeigt, sodass Sie sie leicht vergessen können. Und das Ausführen des Codes auf einem anderen Profil/einer anderen Maschine würde einen Fehler verursachen.

Daher würde ich empfehlen, eine Jupyter Notebook-Erweiterung zu verwenden, weil die importierten Bibliotheken angezeigt werden. Es wird vermieden, immer die gleichen Bibliotheken am Anfang eines Notebooks zu importieren. Zuerst müssen Sie die nbextension von Jupyter installieren. Sie können entweder klonen den Repo: https://github.com/ipython-contrib/jupyter_contrib_nbextensions oder pip verwenden: pip install jupyter_contrib_nbextensions

Dann können Sie eine nb Erweiterung erstellen, indem Sie einen Ordner Hinzufügen von ‚default_cells‘ auf den Pfad, wo die nb Erweiterungen installiert sind. Zum Beispiel unter Ubuntu ist es/usr/local/share/jupyter/nbextensions /., Vielleicht unter Windows: C: \ Users \ xxx.xxx \ AppData \ Roaming \ jupyter \ nbextensions \

Sie haben 3-Dateien in diesem Ordner zu erstellen:

  • main.js die die js-Code der Erweiterung für die
  • default_cells.yaml Beschreibung enthält API in Jupyter
  • README.MD die übliche Beschreibung für den Reader in der API angezeigt.

verwendete ich den Code aus: https://github.com/jupyter/notebook/issues/1451my main.js ist:

define([ 
    'base/js/namespace' 
], function(
    Jupyter 
) { 
    function load_ipython_extension() { 
     if (Jupyter.notebook.get_cells().length===1){ 
    //do your thing 
     Jupyter.notebook.insert_cell_above('code', 0).set_text("# Scientific libraries\nimport numpy as np\nimport scipy\n\n# import Pandas\n\nimport pandas as pd\n\n# Graphic libraries\n\nimport matplotlib as plt\n%matplotlib inline\nimport seaborn as sns\nfrom plotly.offline import init_notebook_mode, iplot, download_plotlyjs\ninit_notebook_mode()\nimport plotly.graph_objs as go\n\n# Extra options \n\npd.options.display.max_rows = 10\npd.set_option('max_columns', 50)\nsns.set(style='ticks', context='talk')\n\n# Creating alias for magic commands\n%alias_magic t time"); 
     } 
    } 
    return { 
     load_ipython_extension: load_ipython_extension 
    }; 
}); 

die .yaml wie diese formatiert werden muss:

Type: IPython Notebook Extension 
Compatibility: 3.x, 4.x 
Name: Default cells 
Main: main.js 
Link: README.md 
Description: | 
    Add a default cell for each new notebook. Useful when you import always the same libraries$ 


Parameters: 
- none 

und der README.md

default_cells 
========= 

Add default cells to each new notebook. You have to modify this line in the main.js file to change your default cell. For example 

`Jupyter.notebook.insert_cell_above('code', 0).set_text("import numpy as np/nimportpandas as pd")` 


You can also add another default cell by creating a new line just below : 

`Jupyter.notebook.insert_cell_above('code', 1).set_text("from sklearn.meatrics import mean_squared_error")` 

**Don't forget to increment 1 if you want more than one extra cell. ** 

Dann müssen Sie nur die "Standardzellen" exte aktivieren nsion in der neuen Registerkarte 'nbextensions', die in Jupyter erschien.

Das einzige Problem ist, dass es erkennt, ob das Notebook neu ist, indem Sie die Anzahl der Zellen im Notebook betrachten. Wenn Sie jedoch Ihren gesamten Code in eine Zelle geschrieben haben, wird er als neues Notizbuch erkannt und fügt weiterhin die Standardzellen hinzu.

Verwandte Themen