Importieren Sie Module automatisch, wenn Sie den Python- oder Ipython-Interpreter eingeben


119

Ich tippe import numpy as npfast jedes Mal, wenn ich den Python-Interpreter starte. Wie richte ich den Python- oder Ipython-Interpreter so ein, dass numpy automatisch importiert wird?

Antworten:


70

Verwenden Sie die Umgebungsvariable PYTHONSTARTUP . Aus der offiziellen Dokumentation:

Wenn dies der Name einer lesbaren Datei ist, werden die Python-Befehle in dieser Datei ausgeführt, bevor die erste Eingabeaufforderung im interaktiven Modus angezeigt wird. Die Datei wird in demselben Namespace ausgeführt, in dem interaktive Befehle ausgeführt werden, sodass darin definierte oder importierte Objekte ohne Einschränkung in der interaktiven Sitzung verwendet werden können.

Erstellen Sie einfach ein Python-Skript mit der import-Anweisung und zeigen Sie mit der Umgebungsvariablen darauf. Denken Sie jedoch daran, dass "Explizit immer besser als implizit ist". Verlassen Sie sich daher bei Produktionsskripten nicht auf dieses Verhalten.

Informationen zu Ipython finden Sie in diesem Tutorial zum Erstellen einer ipython_config-Datei


@mklauber, danke, aber die akzeptierte Lösung dort ist veraltet. Es hat mich jedoch zu meiner Bearbeitung inspiriert. @ OP: Siehe meine bearbeitete Antwort
Dhara

3
@ user545424 zum jetzigen Zeitpunkt (ipython 1.1.0) unterstützt auch PYTHONSTARTUP.
Pflaquerre

Einstellung env PYTHONSTARTUP="~/.startup.py"hat bei mir nicht funktioniert
Seanny123

Nur eine Notiz export PYTHONSTARTUP=~/.python_shell_startup.pyzum Einstellen der Variablen.
PallavBakshi

77

Für Ipython gibt es zwei Möglichkeiten, dies zu erreichen. Bei beiden handelt es sich um das Konfigurationsverzeichnis von ipython, das sich in befindet ~/.ipython.

  1. Erstellen Sie ein benutzerdefiniertes Ipython-Profil.
  2. Oder Sie können eine Startdatei hinzufügen ~/.ipython/profile_default/startup/

Der Einfachheit halber würde ich Option 2 verwenden. Alles, was Sie tun müssen, ist, eine .pyoder .ipy-Datei in das ~/.ipython/profile_default/startupVerzeichnis zu legen, und sie wird automatisch ausgeführt. Sie können also einfach import numpy as npin eine einfache Datei einfügen und haben np im Namespace Ihrer ipython-Eingabeaufforderung.

Option 2 funktioniert tatsächlich mit einem benutzerdefinierten Profil. Wenn Sie jedoch ein benutzerdefiniertes Profil verwenden, können Sie die Startanforderungen und andere Konfigurationen basierend auf einem bestimmten Fall ändern. Allerdings, wenn Sie würde immer wie npSie dann zur Verfügung steht mit allen Mitteln es im Startverzeichnis gesetzt.

Weitere Informationen zur Ipython-Konfiguration. Die Dokumente haben eine viel vollständigere Erklärung.


2
In Ubuntu 14.04 ist das Verzeichnis tatsächlich: ~/.config/ipython/profile_default/startup/und nicht~/.ipython/profile_default/startup/
Peter

1
Leider erlaubt Option 2 oben nicht das Ausfüllen von Registerkarten.
user1717828

21

Ich benutze eine ~ / .startup.py-Datei wie folgt:

# Ned's .startup.py file
print("(.startup.py)")
import datetime, os, pprint, re, sys, time
print("(imported datetime, os, pprint, re, sys, time)")

pp = pprint.pprint

Definieren Sie dann PYTHONSTARTUP = ~ / .startup.py, und Python verwendet es beim Starten einer Shell.

Die print-Anweisungen sind vorhanden. Wenn ich die Shell starte, werde ich daran erinnert, dass sie wirksam ist und was bereits importiert wurde. Die ppVerknüpfung ist auch sehr praktisch ...


Hat unter Linux nicht funktioniert. Muss ich Python anweisen, in meinem Home-Verzeichnis nachzuschauen oder so?
Seanny123

oops: habe einen wichtigen Schritt vergessen: Ich habe ihn hinzugefügt: definiere PYTHONSTARTUP
Ned Batchelder

Ich weiß nie, wann das ~als Ersatz für $HOMEWerke funktioniert oder nicht, aber anstelle dieses relativen Pfades musste ich unter MacOS, fish und python3 einen absoluten Pfad verwenden.
Rien333

@Ned Batchelder, vielen Dank, das habe ich gesucht. Nebenfrage, ich benutze dies unter Windows und pp Verknüpfung funktioniert nicht. Könnten Sie uns bitte mitteilen? >>> pp <function pprint at 0x0000020DAF90C8C8> >>> pp () Traceback (letzter Aufruf zuletzt): Datei "<stdin>", Zeile 1, in <module> TypeError: pprint () fehlt 1 Erforderliches Positionsargument: 'Objekt' >>>
Forever Learner

5

Während das Erstellen eines benutzerdefinierten Startskripts , wie es ravenac95 vorschlägt, in den meisten Fällen die beste allgemeine Antwort ist, funktioniert es unter Umständen nicht, unter denen Sie a verwenden möchten from __future__ import X. Wenn Sie manchmal in Python 2.x arbeiten, aber die moderne Division verwenden möchten, gibt es nur einen Weg, dies zu tun. Wenn Sie ein Profil erstellt haben, bearbeiten Sie das profile_default(für Ubuntu befindet es sich in ~/.ipython/profile_default) und fügen Sie unten Folgendes hinzu:

c.InteractiveShellApp.exec_lines = [
    'from __future__ import division, print_function',
    'import numpy as np',
    'import matplotlib.pyplot as plt',
    ]

3

Als einfachere Alternative zur akzeptierten Antwort unter Linux:

Definieren Sie einfach einen Alias, z. B. alias pynp='python -i -c"import numpy as np"'in Ihre ~ / .bash_aliases-Datei. Sie können dann Python + Numpy mit aufrufen pynpund weiterhin nur Python mit verwenden python. Das Verhalten von Python-Skripten bleibt unberührt.


PYTHONSTARTUPwird nur im interaktiven Modus aufgerufen , sodass das Verhalten von Python-Skripten sowieso unberührt bleibt. Ein Alias ​​könnte auch mit einem Dateiverweis erstellt werden:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

Sie können einen normalen Python - Skript erstellen , wie import_numpy.pyoder was Sie wollen

#!/bin/env python3
import numpy as np

Starten Sie es dann mit der -iFlagge.

python -i import_numpy.py

Auf diese Weise können Sie flexibel nur Module auswählen, die Sie für verschiedene Projekte benötigen.


1

Wie ravenac95 in seiner genannten Antwort , können Sie entweder ein eigenes Profil erstellen oder das Standardprofil ändern. Diese Antwort ist eine Schnellansicht der Linux-Befehle, die import numpy as npautomatisch benötigt werden.

Wenn Sie ein benutzerdefiniertes Profil mit dem Namen verwenden möchten, führen Sie Folgendes numpyaus:

ipython profile create numpy
echo 'import numpy as np' >> $(ipython locate profile numpy)/startup/00_imports.py
ipython --profile=numpy

Oder wenn Sie das Standardprofil so ändern möchten, dass immer numpy importiert wird:

echo 'import numpy as np' >> $(ipython locate profile default)/startup/00_imports.py
ipython

Weitere Informationen zum Konfigurieren von Profilen finden Sie im IPython-Konfigurations-Tutorial . Sehen Sie, um .ipython/profile_default/startup/READMEzu verstehen, wie das Startverzeichnis funktioniert.


1

Mein Standardaufruf ipythonist

ipython --pylab --nosep --InteractiveShellApp.pylab_import_all=False

--pylabist seit ipythoneiniger Zeit eine Option. Es importiert numpyund (Teile von) matplotlib. Ich habe die --Inter...Option hinzugefügt, damit der *Import nicht verwendet wird , da ich lieber die explizite Option verwende np.....

Dies kann eine Verknüpfung, ein Alias ​​oder ein Skript sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.