Dlaczego nie mogę zaimportować skryptu z konsoli python?

9

pracuję z konsolą Python QGIS. Zwykle przechowuję wszystkie moje skrypty Pythona w ~ / Scripts / python. Ustawiłem PYTHONPATH na ~ / Scripts / python w moim .bashrc Jednak nie mogę zaimportować moich skryptu z konsoli wewnątrz QGIS.

Oto mój błąd, gdy próbuję zaimportować skrypt o nazwie Create_Figures_2D

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

Jak skonfigurować PYTHONPATH dla pigmejów?

Renaud
źródło
1
Spróbuj dodać ~/Scripts/pythondo ŚCIEŻKI, która normalnie działa dla mnie. Sprawdź to za pomocąimport os; os.path
Nathan W

Odpowiedzi:

11

W konsoli Python uruchom następujące polecenie:

import sys
sys.path

Sprawdź, czy wpis PYTHONPATH jest na liście. Zgaduję, że nie, ponieważ ta zmienna środowiskowa prawdopodobnie nie jest dostępna dla działającego Pythona w QGIS.

Aby dodać folder skryptów do sys.path konsoli, wykonaj zwykłą append ():

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

Następnie powinieneś być w stanie zaimportować stamtąd moduły dla tej sesji konsoli. Polecam rozszerzenie ~ do pełnej ścieżki domowej użytkownika (nie jestem pewien, czy rozszerzenie Python ~).

EDYCJA : ~ rozszerzenie wydaje się nie być obsługiwane przez sys.path (przynajmniej na Macu).

Konsola Python w QGIS jest tworzona przez moduł Pythona „console.py”. Jeśli więc chcesz dodać własną ścieżkę do jej ścieżki sys.path w bardziej trwały sposób, edytuj plik console.py i dodaj instrukcję sys.path.append ('path / to / my / scripts') po module sekcja importu.

Plik console.py znajduje się tutaj (dla komputerów Mac, używając pakietu QGIS KyngChaos.com ):

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

Oczywiście jest to hack, który zostanie usunięty i będzie musiał zostać ponownie wykonany po aktualizacji QGIS.app.

Wszelkie modyfikacje działającej ścieżki sys.path interpretera QGIS są dostępne również dla innych wtyczek.

Bezpieczniejszą alternatywą może być stworzenie prostej, rozwojowej wtyczki PyQGIS, która ładuje i wykonuje tylko sys.path.append (), kiedy tylko chcesz. Może również usunąć tę ścieżkę z sys.path na plugin unload (). Nie testowałem, czy korekta sys.path takiej wtyczki byłaby dostępna w już załadowanej konsoli (tak przypuszczam).

dakcarto
źródło
Twój hack do tej pory działa dobrze dla mnie. Dziękuję bardzo. Na Ubuntu 12.04 plik znajduje się w /usr/share/pyshared/qgis/console.py
Renaud
Świetny! Nawiasem mówiąc, musiałem zrestartować mój QGIS w systemie Windows 7, aby konsola Python wiedziała o dołączonej ścieżce.
Dirk