Verwenden von PyQGIS, ArcPy, NumPy, SciPy zusammen in der Windows-Eingabeaufforderung

8

Ich lief über dieses kleine Problem , wenn ich war auf der Suche nach Zugang Python - Installationen von ArcGIS, QGIS, Anaconda (zitiert , weil SciPy & NumPy mit ihm kommen), und Version 2.7 vs 3. Manchmal finde ich es einfacher, nur in Windows - Pop Command Promptzu Arbeiten Sie schnell, anstatt ein GIS-Programm oder eine Python-IDE zu öffnen, um auf die interaktive Eingabeaufforderung zuzugreifen.

Anstatt zu jedem Ordner zu navigieren, Verknüpfungen festzulegen oder die PATHUmgebungsvariable auszuschalten , wollte ich eine andere Möglichkeit, über die auf jede Python-Installation zuzugreifen Command Prompt.

Bearbeiten

GIS-Experten, die Python für ihre Arbeit verwenden, müssen letztendlich manuell auf jede Installation zugreifen, um auf die darin enthaltenen Funktionen zugreifen zu können. Statt zu Last auf so etwas wie ArcMap wartet, ist es in der Regel viel schneller Ihre treffen winkey -r + cmd und geben Sie pythonin der Eingabeaufforderung zu starten , die Python - Konsole. Wenn Sie ArcPyein Shapefile neu projizieren möchten , müssen Sie Ihre Python-Konsole öffnen, die mit verknüpft ist ArcPy. Wenn Sie ein Tool von verwenden möchten, PyQGISweil Sie nicht über die entsprechende ESRI-Lizenz verfügen, müssen Sie das finden, das python.exemit diesen Modulen verknüpft ist. Dies kann ein Schmerz sein , wenn Sie versuchen , Arbeit zu tun in ArcPy, PyQGIS, NumPyoderSciPy ohne dass alle Bibliotheken zusammenhängend als eine Python-Installation installiert sind.

In der Regel sind Sie an Ihre PathVariable gebunden , an die die Python-Installation in der Command Prompt. Diese Frage und die folgenden Antworten zeigen, wie GIS-Experten möglicherweise mehrere Python-Installationen zusammen in einer einzigen Umgebung verwenden können. Python-IDEs zielen auf eine einzelne Python-Installation ab und erfordern das Ändern von Einstellungen, um andere zu verwenden. Beispielsweise PyScripterzielt meine Installation auf meine ArcGIS-Installation von Python ab. Wenn ich meine PyQGISModule verwenden möchte , muss ich QGIS öffnen oder die Einstellungen in ändern PyScripter.

Wenn Sie Module / vollständige Skripte schreiben, ist es sinnvoll, eines einzeln anzuvisieren. Auf diese Weise kann es zu einer Art Code-Vervollständigung kommen. Allerdings , wenn Sie nur einige Werkzeuge in jeder Installation unter Verwendung eines Datensatzes zu manipulieren, wäre es viel schöner , wenn Sie schnell Flip Python - Konsolen / Installationen innerhalb eines einzigen Bildschirm auf aka das Command Prompt.

An diejenigen, die zum Abschluss / Off-Topic abstimmen ...

Obwohl dies offensichtlich für alles gilt, an das die Python-Sprache angehängt ist , dient es für den armen GIS-Benutzer, der es sich nicht leisten kann, ESRI-Erweiterungen für Datenanalysetools zu kaufen, als Möglichkeit, sein Leben zu vereinfachen. Wie einige der Antworten gezeigt haben, kann die Möglichkeit, diesen Prozess stärker anzupassen, z. B. Argumente zu .cmdDateien hinzuzufügen , möglicherweise von großem Nutzen sein, wenn jemand einen benutzerdefinierten Prozess ausführt. Ein erfahrener GIS- / Computerbenutzer kann möglicherweise benutzerdefinierte .cmdDateien einrichten, um Prozesse schnell auszuführen, ohne sich um die Installation verschiedener IDEs / GIS-Software usw. kümmern zu müssen.

Der einzige Nachteil beim Ausführen einer Python-Konsole innerhalb von Command Promptist der Verlust der Code-Vervollständigung. Wenn Sie jedoch etwas genug ausführen, z. B. arcpy.AddField_management(), wird die Code-Vervollständigung nur behindert.

Branco
quelle
2
Ich frage mich, ob dies für SuperUser angemessener wäre. Dies hat wirklich nichts mit GIS zu tun, außer tangential eine Laufzeit, die üblicherweise in GIS verwendet wird. Ich denke, Sie werden mit größerer Wahrscheinlichkeit die beste Antwort auf SuperUser erhalten als hier.
jpmc26
1
@ jpmc26. Möglicherweise, aber ich denke, es ist GIS-angemessen, da ich QGIS und ArcGIS speziell verglichen habe und die Verwendung mehrerer Python-Installationen in GIS häufig vorkommen kann. Es hat sich ein wenig erweitert, aber da viele Antworten hier codierte Antworten sind, scheint es passend.
Branco
Auf dieser Seite gibt es häufig Fragen zu Installationen und Konfigurationen von GIS-Software. Dies gilt auch, wenn wir über die Eingabeaufforderung zwei verschiedene Python-Installationen von zwei verschiedenen GIS-Softwarekomponenten aufrufen. Es kann zwar problemlos auf andere Eingabeaufforderungen erweitert werden, aber die ursprüngliche Absicht besteht darin, den schnellen Zugriff auf QGIS / ESRI-Python-Installationen ohne Probleme zu konfigurieren.
Branco

Antworten:

9

Ich werde eine Alternative anbieten, die ich für etwas sauberer halte. Es ist inspiriert von einer Kombination aus Josefs Vorschlag und einem gemeinsamen Muster auf * nix-Systemen.

  1. Erstellen Sie zunächst ein Verzeichnis. In diesem Verzeichnis werden "Alias" -Dateien für jede Installation gespeichert. Also so etwas wie C:\Python\aliasesoder C:\PythonAliaseswird funktionieren.

  2. Als nächstes erstellen Sie ein Skript für jede Installation. Jedes Skript aliasisiert im Wesentlichen eine der Python-Installationen, auf die Sie verweisen müssen, indem Sie einfach die ausführbare Datei aufrufen. Beispielsweise würde der Inhalt für die QGIS-Installation folgendermaßen aussehen:

    @"C:\Program Files\QGIS Dufour\bin\Python.exe" %*

    Speichern Sie es mit einem aussagekräftigen Namen in dem von Ihnen erstellten Ordner, z. B. pyqgis.cmdoder pyqgis.bat.

    Das %*übergibt stattdessen alle Argumente, die dem Skript gegeben wurden, an die ausführbare Python-Datei. So können Sie Folgendes tun:

    C:\>C:\Python\aliases\pyqgis.cmd -c "print('Hello, world!')"
    Hello, world!

    (Das @Symbol verhindert lediglich, dass die Eingabeaufforderung den Befehl unnötig wiederholt.)

  3. Fügen Sie das Verzeichnis mit diesen Skripten hinzu PATH. Jetzt können Sie sie ohne den vollständigen Pfad aufrufen:

    C:\>pyqgis -c "print('Hello, world!')"
    Hello, world!

Dies hat meiner Meinung nach mehrere Vorteile:

  • Keine Verwaltung mehrerer systemweiter Umgebungsvariablen. (Weil wir ehrlich sind, ist die Windows-Oberfläche dafür bestenfalls ärgerlich.) Sie ändern nur PATHeinmal. Das Installieren neuer PATHoder das Entfernen alter Installationen ist eine einfache Dateiverwaltung.
  • Alle Ihre Aliase werden an einem Ort aufgelistet. Um herauszufinden, welche Namen Ihnen zur Verfügung stehen, ist eine einfache Verzeichnisliste entfernt. (Dies ist besonders hilfreich, wenn Sie sich nicht an den Namen erinnern können.)
  • Es ist weniger wahrscheinlich, dass Angebotsprobleme auftreten
  • Dies spiegelt ein bereits vorhandenes Muster wider und ist daher leichter zu verstehen / zu erkennen. Es ist nicht ungewöhnlich, Aliase wie python2und python3im binVerzeichnis auf einem * nix-Computer zu sehen. Dies ist zwar nicht genau das Gleiche, aber ich denke, es ist ähnlich genug, dass es für jemanden Sinn macht, zu wissen, dass dies auf * nix-Systemen geschieht.

Ich bin mit dieser Einrichtung nicht ganz zufrieden, aber ich glaube nicht, dass Sie unter Windows viel besser abschneiden können.

jpmc26
quelle
Ich mag diesen Prozess. Wie die meisten typischen Windows-Benutzer wage ich mich nicht zu sehr in die Systemvariablen, den Pfad und andere Dinge, es sei denn, etwas sagt mir dazu. Ich habe letzte Nacht nur versucht, zwischen QGIS Python und Anaconda zu springen und meine kleine Abkürzung herausgefunden. Dies ist wahrscheinlich die bessere langfristige Lösung.
Branco
7

Ich habe mich entschlossen, mit dem System VariablesTeil der Environment VariablesEinstellungen herumzuspielen, um zu sehen, ob ich den Zugriff auf jede Python-Installation im Internet erleichtern kann Command Prompt. Ich fand heraus, dass ich eine neue hinzufügen System Variableund von dort aus aufrufen konnte, um auf die Command Promptgewünschte Python-Installation zuzugreifen.

Einige Beispiele:

Variable = PyQGIS Wert ="C:\Program Files\QGIS Dufour\bin\Python.exe"

Ich habe die doppelten Anführungszeichen dort belassen, damit ich den Abstand in nicht in Anführungszeichen setzen muss Command Prompt, um die gesamte Zeichenfolge als ein einziges Argument zusammenzuhalten

Variable = Anaconda Wert =AnacondaDirectory\Python.exe

Wie ich auf meine Installationen von scipy / numpy / etc. Zugreife

Variable = Python3 Wert =C:\Python34\Python.exe

Python 3 enthält einen Launcher, mit dem Sie die Version ... >> py -3für Python 3 ... hier angeben können

So rufen Sie ein System Variablein der Command Prompt:

Wenn Sie sich in der befinden Command Prompt, können Sie Ihre Variable aufrufen, indem Sie sie %VariableName%in die Eingabeaufforderung eingeben . Bei jeder Python-Installation navigiert es zu {Directory}\Python.exe, um den interaktiven Interpreter zu öffnen. Wenn Sie keinen Wert mit Leerzeichen angegeben haben, müssen Sie Anführungszeichen um Ihren Variablenaufruf hinzufügen, z. "%VariableValueWithSpaces%". Ohne die Anführungszeichen wird die Zeile durch die Leerzeichen geteilt, sodass Ihr Programm nicht gestartet wird.

Ich bin mir sicher, dass es wahrscheinlich einfachere Möglichkeiten gibt, Dinge zu tun, aber ich fand, dass dies ein nützliches Stück Wissen ist, wenn Sie das Command Promptin Windows besonders gern verwenden . Ich mag die Möglichkeit, auf einzelne Python-Installationen zuzugreifen, indem nur ein anderer Variablenname angegeben wird.

Branco
quelle
Alternativ dazu habe ich für jede Installation eine CMD-Datei, die den Pfad und möglicherweise andere Dinge im Pfad festlegt. Also zB python34.cmd in deinem Pfad haben, der enthält @set PATH=C:\Python34\;%PATH%. Wenn Sie dann python34 eingeben, wird diese Python verfügbar.
Josef sagt Reinstate Monica
Meinen Sie es als eine andere Systemvariable? Oder hängen Sie den Speicherort von python34.cmd an Ihre PathVariable an?
Branco
Ich meine , Sie eine cmd - Datei erstellen, wird vor pend die Lage von python.exe auf Ihrem Weg. Sie legen diese Cmd-Datei an einer beliebigen Stelle in Ihrem Pfad ab. Sie können einen neuen Ordner erstellen und ihn der Pfadvariablen voranstellen. Sie können dann python34 von jeder Shell aus ausführen, da es sich im Pfad befindet. Python34.cmd ändert dann den Pfad, sodass die gewünschte Python-Version als erstes im Pfad nur für die aktuelle Shell-Sitzung (und alle untergeordneten Sitzungen) angezeigt wird.
Josef sagt Reinstate Monica
Ok, verstanden ... Das ist auch eine ziemlich gute Idee, besonders wenn Sie der CMD-Datei zusätzliche Einstellungen / Änderungen hinzufügen.
Branco