Erstellen einer separaten Python-Installation, die ArcPy aufrufen kann

28

Ich sehe viele Fragen und Antworten, in denen gefragt wird, wie Sie eine separate Python-Installation erstellen können (z. B. die Anaconda- oder Python XY-Distribution), die Arcpy verwenden kann, ohne die ursprüngliche ArcGIS-Python-Installation zu beschädigen.

Ich hatte das gleiche Problem und ich denke, ich habe eine "universelle" Lösung gefunden. Bisher haben wir das auf ungefähr 8 Computern bei der Arbeit gemacht und alles funktioniert einwandfrei.

Wie installiere ich eine separate Python-Distribution, die ArcGIS verwenden kann?

James
quelle

Antworten:

37

Ich habe ein kleines (und relativ beliebtes) Modul erstellt, das auf Ihrem PC nach ArcGIS sucht. Sobald es gefunden wurde, werden die richtigen Pfade zur Umgebung hinzugefügt, sodass Sie arcpy importieren können. Die Verwendung geht so:

try:
    import archook #The module which locates arcgis
    archook.get_arcpy()
    import arcpy
except ImportError:
    # do whatever you do if arcpy isnt there.

Das Modul wird hier auf github gehostet: https://github.com/JamesRamm/archook

Es ist sehr einfach und ich bin sicher, dass es robuster gemacht werden kann, aber es macht den Job. Es ist auf pypi verfügbar:pip install archook

Es hat ein paar Vorteile gegenüber der eher "manuellen" Originalmethode (siehe unten):

  1. Sie müssen nicht jede Python-Umgebung einzeln konfigurieren ... importieren Sie einfach das Modul und los geht's
  2. Es werden keine Registrierungsschlüssel oder permanenten Umgebungsvariablen bearbeitet / erstellt, sodass keine Möglichkeit besteht, vorhandene Python- / Arcgis-Konfigurationen durcheinander zu bringen.
  3. Sie müssen nichts über Pfade zu verschiedenen Ordnern / Dateien wissen oder auch nicht darüber, welche Version von arcgis Sie installiert haben. Das Modul findet alles für Sie.
  4. Keine Administratorauthentifizierung erforderlich
  5. Es ist nicht spezifisch für Anaconda - es funktioniert mit jeder Python-Installation

Ich habe die ursprüngliche Antwort unten gelassen, aber diese Lösung ist (IMO) 100% besser.


2014 antworten

Okay, diese Antwort funktioniert für die Anaconda 64-Bit-Python-Distribution mit ArcGIS 10.1 64-Bit unter Windows 7 / Windows Server. Einige (oder alle) der unten aufgeführten Tipps gelten möglicherweise für alle anderen Windows-Distributionen von Python. Installieren Sie zuerst anaconda. Es sollte in das Verzeichnis C: \ Anaconda gehen. Aktivieren Sie das Kontrollkästchen "Python als Systemstandard festlegen". Möglicherweise wird eine Warnung ausgegeben, dass ein anderer Python installiert ist, aber fahren Sie fort. Dann:

Setup-Pfade und Umgebungsvariablen

Als Erstes müssen Sie die Datei DTBGGP64.pth aus C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-packages in das neue Distributionsverzeichnis ( C: \ Anaconda ) kopieren . Die Benennung ist beliebig, muss jedoch die Erweiterung .pth aufweisen. Dadurch können Sie ArcPy importieren, wenn Sie die neue Distribution verwenden. Hinweis: Der korrekte Speicherort der Datei DTBGGP64.pth sollte im Site-Packages-Verzeichnis liegen (z. B. C: \ Anaconda \ Libs \ Site-Packages ). Ich habe festgestellt, dass es mit einigen älteren Versionen von Anaconda funktioniert, wenn es sich im obersten Verzeichnis befindet. Als nächstes müssen die Umgebungsvariablen überprüft werden: In der Systemvariablen Pathsollte der vorhandene Pfad zum Python-Verzeichnis durch den neuen Pfad ersetzt werden. (zB C: \ Anaconda; C: \ Anaconda \ Scripts; ) Dies teilt Windows mit, wo sich das Standard-Python-Verzeichnis befindet. Stellen Sie sicher, dass auch die Benutzervariable PYTHONPATH korrekt ist. Dies sollte auf Bibliotheken verweisen, die Sie verwenden möchten und die nicht durch .pth- Dateien beschrieben oder in Site-Paketen installiert sind . Dies können beispielsweise Ihre eigenen Entwicklungspakete oder Pakete wie mapnik sein , die einen anderen Installationsort haben.

Überprüfen Sie die Registrierungseinstellungen

Auf einigen Computern kann das oben Genannte ausreichen, um sicherzustellen, dass Sie Arcpy aus dem neuen Python verwenden können und dass Python in ArcGIS verwendet werden kann. Auf anderen Computern müssen Sie möglicherweise die Registrierungsschlüssel überprüfen. Die folgenden Registrierungsschlüssel haben Python-Einstellungen:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Es sollte einen Schlüssel geben und sein Wert sollte C: \ Anaconda \ Lib; C: \ Anaconda \ DLLs sein (oder die entsprechenden Ordner für Ihre Python-Installation)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
Der Schlüssel sollte C: \ Anaconda sein

Möglicherweise sind andere Python-Versionen installiert. Ändern Sie in diesem Fall die Versionsnummer in den oben genannten Pfaden

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Dies ist der Speicherort der ICO-Datei, die für PYC-Dateien verwendet werden soll

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command Dies ist der Befehl, der beim Öffnen einer .pyc-Datei über die Shell ausgegeben wird. Sie sollten den python.exePfad zum Speicherort Ihrer gewünschten Python-Version ändern

HKEY_CLASSES_ROOT \ Python.File Die hier angegebenen Schlüssel stimmen mit denen für Python.CompiledFile überein, gelten jedoch für eine PY-Datei. Nehmen Sie erneut die relevanten Änderungen vor. Möglicherweise ist ein zusätzlicher Schlüssel für "Mit IDLE bearbeiten" oder "Mit Pythonwin bearbeiten" vorhanden. Nehmen Sie die relevanten Änderungen erneut vor, damit die Pfade in diesen Schlüsseln auf Ihre gewünschte Python-Version verweisen.

HKEY_CLASSES_ROOT \ Python.NoConFile Diese sind die gleichen wie für Python.File, sollten jedoch pythonw.exegegebenenfalls auf das Programm verweisen .

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1
Der Schlüssel PythonDir verweist auf die Python-Installation, die in ArcMap usw. verwendet werden soll. Möglicherweise möchten Sie, dass dies als von ESRI installierte Python-Installation beibehalten wird, oder auf Ihre neue Installation verweisen. Es können weitere Änderungen erforderlich , wenn Sie ArcMap auf die neue Python - Installation zeigen. Es kann durch die neue Distribution installiert mit den Versionen von Paketen (zB numpy) Fragen. Ich habe keine angetroffen.

Für den Großteil meiner Arbeit ist dies irrelevant, da ich normalerweise Python alleine verwenden möchte und gelegentlich Zugriff auf Arcpy habe. Ich möchte selten Python aus arcmap heraus verwenden. Daher habe ich diesen letzten Schritt nur wenig getestet, aber es scheint für alles zu funktionieren, was ich bisher versucht habe.

Ich stelle mir vor, dass der Prozess für die Installation von Python (x, y) usw. ähnlich wäre.

Weitere Hinweise

Der Inhalt der .pth-Datei ist eine Liste von Pfaden, die auf die folgenden Ordner in Ihrer ArcGIS-Installation verweisen: bin64, arcpy, ArcToolbox \ Scripts. Meine .pth-Datei enthält beispielsweise Folgendes:

C:\Program Files (x86)\ArcGIS\Desktop10.2\bin64
C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy
C:\Program Files (x86)\ArcGIS\Desktop10.2\ArcToolbox\Scripts

James
quelle
Installiert dies alle Python-Abhängigkeiten, die ArcGIS hat? matplotlib, numpy, xlrd, xlwt und dateutil?
KHibma
Ja. Eine vollständige Liste der Pakete für die Anaconda-Distribution finden Sie hier: docs.continuum.io/anaconda/pkgs.html Ich kenne Python (x, y) oder andere Distributionen nicht so gut
James
2
Vergessen Sie nicht, dass ArcGIS (10.2 und 10.1) sehr spezielle Versionsanforderungen für numpy hat - muss 1.6.1 sein, oder Sie können arcpy unterbrechen.
user2856
1
Bitte fügen Sie den Inhalt der Datei DTBGGP64.pth hinzu! Viele Benutzer scheinen dies nicht zu haben. :)
mmann1123
1
Ein wirklich nettes Feature von Anaconda ist, dass Sie es mit virtuellen Umgebungen mit den Versionen einrichten können, die Sie für ArcGIS oder ein anderes Paket benötigen. Sie könnten beispielsweise eine virtuelle Umgebung für ArcGIS einrichten, die die von Esri-Tools erwarteten Versionen aufweist, und eine andere, die Arcpy nicht enthält, wenn Sie vollständig außerhalb von ArcGIS arbeiten.
Curtis Price
5

Meine Lösung besteht darin, ein Startskript einzurichten, das den Pfad basierend auf der verwendeten Python-Umgebung festlegt. Diese Methode hat den (großen) Vorteil, dass Sie keinen Administratorzugriff benötigen, um .pth-Dateien in Python-Installationen zu schreiben. Dieses Skript ist so eingerichtet, dass es sowohl 32-Bit- als auch 64-Bit-Anaconda und ArcGIS / arcpy verwendet.

    # Startup script to link Anaconda python environment with ArcGIS
    #
    # 1. Install Anaconda, setup environment to match your ArcGIS version
    # 2. Edit the paths below
    # 3. Put this startup script in the startup folder as "usercustomize.py"
    #    Startup folder can be found with: "C:\Python27\ArcGIS10.2\python -m site --user-site"
    #    Usually will be:
    # C:\Users\%USERNAME%\AppData\Roaming\Python\Python27\site-packages

    import sys
    import os

    # edit these paths to match your setup
    arcver = "10.2"
    # Anaconda home folders
    conda32 = r"D:\Users\cprice\Anaconda"
    conda64 = r"D:\Users\cprice\Anaconda64"
    # here are the conda environments you've set up use with ArcGIS
    # arc1022 is the environment setup for ArcGIS
    conda_env32 = "{}/envs/{}".format(conda32, "arc1022")
    conda_env64 = "{}/envs/{}".format(conda64, "arc1022")

    # do not edit below this line

    # ArcGIS Python home folders
    # i.e. C:\Python27\ArcGIS10.2
    arcver = arcver[:4]
    arcpy32 = r"C:\Python27\ArcGIS{}".format(arcver)
    arcpy64 = r"C:\Python27\ArcGISx64{}".format(arcver)

    try:
        if sys.version.find("64 bit") < 0:
            conda_path = os.path.normpath(conda_env32)
            arcpy_path = os.path.normpath(arcpy32)
            arcpy_pthfile = os.path.normpath(
                arcpy_path + "/lib/site-packages/desktop{}.pth".format(arcver))
        else:
            conda_path = os.path.normpath(conda_env64)
            arcpy_path = os.path.normpath(arcpy64)
            arcpy_pthfile = os.path.normpath(
                arcpy_path + "/lib/site-packages/DTBGGP64.pth")

        for p in [conda_path, arcpy_path, arcpy_pthfile]:
            if not os.path.exists(p):
                raise Exception("{} not found".format(p))

        ## print(sys.prefix)
        ## print(conda_path)

        # If running ArcGIS's Python, add conda modules to path
        if (sys.executable.lower().find("desktop" + arcver) != -1
            or sys.prefix.lower().find("arcgis10") != -1):
            sys.path.append(os.path.dirname(arcpy_path))
            conda_site = os.path.join(conda_path, "lib", "site-packages")
            if not os.path.isdir(conda_site):
                raise Exception()
            sys.path.append(conda_site)
            print("usercustomize.py: added conda paths to arc")

        # if running Anaconda add arcpy to path
        elif sys.prefix.lower() == conda_path.lower():
            with open(arcpy_pthfile, "r") as f:
                sys.path +=  [p.strip() for p in f.readlines()]
            print("usercustomize.py: added arcpy paths to conda")

    except Exception as msg:
        print(msg)
        pass
Curtis Price
quelle
Wie wird dieses Strartup-Skript für virtualenv in anderen .py-Skripten festgelegt / aufgerufen? Wenn Sie beispielsweise nur ein .py-Skript haben, das "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')" lautet? Vereinfachtes Beispiel natürlich. Vielen Dank für jeden Rat
AlexS1
3

Falls dies mit ArcGIS Pro versucht wird (dh mit Python 3 anstelle von Python 2):

Ich benutze Spyder im Anaconda-Paket. Um dies zu erreichen, navigierte ich in Spyder zu Tools> Python Interpreter und verwies Spyder auf die Datei propy.bat, die sich derzeit unter C: \ Programme \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat befindet.

Dadurch wird die richtige Python-Version in Spyder aktiviert und Sie können Arcpy importieren.

T Lynch
quelle
1

Ich verwende den folgenden Code, um eine separate virtuelle Umgebung einzurichten, die arcpy und dessen Abhängigkeiten enthält:

set "VENV_PATH=C:\VirtualEnvs\MyArcPyEnv"
set "PYTHON=C:\Python27\ArcGIS10.3"

mklink /J %VENV_PATH%\Lib\site-packages\arcpy "C:\Program Files (x86)\ArcGIS\Desktop10.3\arcpy\arcpy"
mklink /J %VENV_PATH%\Lib\site-packages\numpy %PYTHON%\Lib\site-packages\numpy

mklink /J %VENV_PATH%\Lib\site-packages\matplotlib C:\Python27\ArcGIS10.3\Lib\site-packages\matplotlib
mklink /J %VENV_PATH%\Lib\site-packages\dateutil %PYTHON%\Lib\site-packages\dateutil
mklink /J %VENV_PATH%\Lib\site-packages\mpl_toolkits %PYTHON%\Lib\site-packages\mpl_toolkits

copy %PYTHON%\Lib\site-packages\pyparsing.py  %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\pylab.py %VENV_PATH%\site-packages
copy %PYTHON%\Lib\site-packages\netcdftime.py %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\netCDF4_utils.py %VENV_PATH%\Lib\site-packages

REM Only one of the following .pth files will exist (dependent on x64 or x32)

copy %PYTHON%\Lib\site-packages\Desktop10.3.pth %VENV_PATH%\Lib\site-packages
copy %PYTHON%\Lib\site-packages\DTBGGP64.pth %VENV_PATH%\Lib\site-packages
geographika
quelle