Warum kann ich mein Skript nicht von der Python-Konsole importieren?

9

Ich arbeite mit der QGIS Python-Konsole. Normalerweise speichere ich alle meine Python-Skripte in ~ / Scripts / python. Ich habe PYTHONPATH in meiner .bashrc auf ~ / Scripts / python gesetzt. Ich kann meine Skripte jedoch nicht von der Konsole in QGIS importieren.

Hier ist mein Fehler, wenn ich versuche, ein Skript namens Create_Figures_2D zu importieren

import Create_Figures_2D
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/qgis/utils.py", line 309, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named Create_Figures_2D

Wie richte ich den PYTHONPATH für Pygis ein?

Renaud
quelle
1
Versuchen Sie ~/Scripts/python, PATH hinzuzufügen , das normalerweise für mich funktioniert. Überprüfen Sie es mitimport os; os.path
Nathan W

Antworten:

11

Führen Sie in der Python-Konsole Folgendes aus:

import sys
sys.path

Überprüfen Sie, ob Ihr PYTHONPATH-Eintrag aufgeführt ist. Ich vermute nicht, da diese Umgebungsvariable für QGISs laufenden Python wahrscheinlich nicht verfügbar ist.

Um Ihren Skriptordner zum sys.path der Konsole hinzuzufügen, führen Sie regelmäßig append () aus:

sys.path.append('~/Scripts/python')

Dann sollten Sie in der Lage sein, Ihre Module für diese Konsolensitzung von dort zu importieren. Ich empfehle, das ~ auf den vollständigen Home-Pfad Ihres Benutzers zu erweitern (nicht sicher, ob Python die ~ Erweiterung durchführt).

EDIT : ~ Expansion nicht scheinen von sys.path unterstützt werden (auf Mac, zumindest).

Die Python-Konsole von QGIS wird von dem Python-Modul 'console.py' erstellt. Wenn Sie also Ihren benutzerdefinierten Pfad dauerhafter zu sys.path hinzufügen möchten, bearbeiten Sie die Datei console.py und fügen Sie nach dem Modul die Anweisung sys.path.append ('path / to / my / scripts') hinzu Importbereich.

console.py befindet sich hier (für Mac mit dem KyngChaos.com QGIS-Paket ):

/Applications/QGIS.app/Contents/Resources/python/qgis/console.py

Dies ist natürlich ein Hack , der gelöscht wird und bei einem QGIS.app-Update wiederholt werden muss.

Jede Anpassung des sys.path des laufenden QGIS Python-Interpreters ist auch für andere Plugins verfügbar.

Eine sicherere Alternative könnte darin bestehen, ein einfaches PyQGIS-Entwicklungs-Plugin zu erstellen, das sys.path.append () lädt und lediglich ausführt, wann immer Sie möchten. Es könnte diesen Pfad auch aus sys.path beim Plugin unload () entfernen. Ich habe nicht getestet, ob die sys.path-Anpassung eines solchen Plugins in einer bereits geladenen Konsole verfügbar ist (ich vermute, das wäre es.)

Dakcarto
quelle
Dein Hack funktioniert bisher gut für mich. Vielen Dank. Am Ubuntu 12.04 befindet sich die Datei unter /usr/share/pyshared/qgis/console.py
Renaud
Ausgezeichnet! Übrigens musste ich mein QGIS unter Windows 7 neu starten, um die Python-Konsole auf den angehängten Pfad aufmerksam zu machen.
Dirk