Fare un'installazione separata di Python che può chiamare ArcPy?


28

Vedo un sacco di domande e risposte che chiedono come è possibile creare un'installazione Python separata (ad es. La distribuzione Anaconda o Python XY) che può usare arcpy, senza "interrompere" l'installazione originale di ArcGIS python.

Ho avuto lo stesso problema e penso di aver trovato una soluzione "universale". Finora l'abbiamo fatto su circa 8 computer al lavoro e tutto funziona bene.

Come installare una distribuzione Python separata che può usare ArcGIS?

Risposte:


37

Ho creato un modulo piccolo (e relativamente popolare) che si spegne e cerca ArcGIS sul tuo PC. Una volta trovato, aggiunge i percorsi corretti all'ambiente in modo da poter importare arcpy. L'utilizzo è il seguente:

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

Il modulo è ospitato su github qui: https://github.com/JamesRamm/archook

È molto semplice e sono sicuro che può essere reso più robusto, ma fa il lavoro. È disponibile su Pypi:pip install archook

Presenta alcuni vantaggi rispetto al metodo originale più "manuale" (dettagliato di seguito):

  1. Non è necessario configurare ciascun ambiente Python separatamente ... basta importare il modulo e il gioco è fatto
  2. Non modifica / crea chiavi di registro o variabili di ambiente permanenti, quindi non c'è alcuna possibilità di rovinare qualsiasi configurazione esistente di python / arcgis.
  3. Non è necessario conoscere alcunché sui percorsi di varie cartelle / file o anche sulla versione di arcgis installata. Il modulo troverà tutto per te.
  4. Non è necessaria l'autenticazione dell'amministratore
  5. Non è specifico con anaconda: funzionerà con qualsiasi installazione di Python

Di seguito ho lasciato la risposta originale, ma questa soluzione è (IMO) migliore del 100%.


Risposta 2014

Ok, quindi questa risposta funziona per la distribuzione Anaconda 64 bit Python con ArcGIS 10.1 64 bit su Windows 7 / Windows Server. Alcuni (o tutti) dei suggerimenti riportati di seguito potrebbero applicarsi a qualsiasi altra distribuzione di Python di Windows. Innanzitutto, installa anaconda, dovrebbe andare nella directory C: \ Anaconda. Seleziona la casella "Rendi Python predefinito di sistema". Potrebbe avvertire che è installato un altro python, ma continua. Poi:

Percorsi di installazione e variabili di ambiente

La prima cosa da fare è copiare il file DTBGGP64.pth nella nuova directory di distribuzione ( C: \ Anaconda ) da C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-pacchetti . Il nome è arbritrario, ma deve avere l' estensione .pth Questo ti permetterà di importare ArcPy quando usi la nuova distribuzione. Nota: la posizione corretta del file DTBGGP64.pth dovrebbe trovarsi nella directory dei pacchetti del sito (ad es. C: \ Anaconda \ Libs \ site-pacchetti ). Ho scoperto che con alcune versioni precedenti di Anaconda, funziona se si trova nella directory di livello superiore Successivamente, è necessario controllare le variabili di ambiente: Nella variabile di sistema Percorso, il percorso esistente nella directory python deve essere sostituito con il nuovo percorso. (es. C: \ Anaconda; C: \ Anaconda \ Scripts; ) Questo dirà a windows dove si trova la directory python predefinita. Assicurarsi che anche la variabile utente PYTHONPATH sia corretta. Questo dovrebbe puntare a tutte le librerie che si desidera utilizzare che non sono descritte dai file .pth o che sono installate nei pacchetti del sito . Vale a dire che questo potrebbe essere il tuo pacchetto di sviluppo, o pacchetti come mapnik che hanno una posizione di installazione diversa.

Controlla le impostazioni del registro

Su alcune macchine, quanto sopra può essere sufficiente per garantire che tu possa usare arcpy dal nuovo python e che python possa essere usato in ArcGIS. Su altri computer, potrebbe essere necessario controllare le chiavi di registro. Le seguenti chiavi di registro hanno le impostazioni di Python:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Dovrebbe esserci una chiave e il suo 'valore dovrebbe essere C: \ Anaconda \ Lib; C: \ Anaconda \ DLLs (O le cartelle corrispondenti per l'installazione di Python)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
La chiave dovrebbe essere C: \ Anaconda

Potresti avere altre versioni di Python installate ... nel qual caso modifica il numero di versione nei percorsi precedenti

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Questa è la posizione del file .ico da utilizzare per i file .pyc

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command Questo è il comando da emettere quando si apre un file .pyc dalla shell. È necessario modificare il python.exepercorso nella posizione della versione di Python desiderata

HKEY_CLASSES_ROOT \ Python.File Le chiavi qui sono le stesse di quelle per Python.CompiledFile tranne che si applicano a un file .py. Ancora una volta, apporta le modifiche pertinenti. Potrebbe avere una chiave aggiuntiva per "Modifica con IDLE" o "Modifica con Pythonwin". Ancora una volta, apporta le modifiche pertinenti in modo che i percorsi in queste chiavi puntino alla versione di Python desiderata.

HKEY_CLASSES_ROOT \ Python.NoConFile Questi sono gli stessi di Python.File, ma dovrebbero puntare al pythonw.exeprogramma dove appropriato.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1
La chiave PythonDir punta all'installazione di Python da utilizzare in ArcMap ecc. È possibile che rimanga come l'installazione di Python installata da ESRI, oppure puntarla alla nuova installazione. Si può richiedere altri cambiamenti se si punta ArcMap alla nuova installazione di pitone. Ci possono essere problemi con le versioni dei pacchetti (per esempio NumPy) installati dalla nuova distribuzione. Non ne ho incontrato nessuno.

Per la maggior parte del mio lavoro, questo è irrilevante poiché in genere voglio usare Python da solo e occasionalmente ho accesso ad Arcpy. Raramente vorrei usare Python da Arcmap..Pertanto ho fatto pochi test su questo passaggio finale, ma sembra funzionare per tutto ciò che ho provato finora.

Immagino che il processo sarebbe simile per l'installazione di Python (x, y) ecc.

Altre note

Il contenuto del file .pth è un elenco di percorsi che puntano alle seguenti cartelle nell'installazione di ArcGIS: bin64, arcpy, ArcToolbox \ Scripts Ad esempio, il mio file .pth contiene quanto segue:

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


Questo installa tutte le dipendenze di Python che ArcGIS ha? matplotlib, numpy, xlrd, xlwt e dateutil?
KHibma,

Sì. Per la distribuzione di anaconda, un elenco completo dei pacchetti è disponibile qui: docs.continuum.io/anaconda/pkgs.html Non ho familiarità con Python (x, y) o altre distribuzioni
James,

2
Non dimenticare che ArcGIS (10.2 e 10.1) ha requisiti di versione molto specifici per numpy - deve essere 1.6.1 o puoi interrompere arcpy.
user2856

1
Aggiungi il contenuto del file DTBGGP64.pth! Molti utenti non sembrano avere questo. :)
mmann1123,

1
Una caratteristica davvero interessante di anaconda è che puoi configurarla con ambienti virtuali con le versioni necessarie per ArcGIS o qualsiasi altro pacchetto. Ad esempio, potresti avere un ambiente virtuale impostato per funzionare con ArcGIS che ha le versioni che gli strumenti Esri si aspettano e un altro che non include arcpy quando lavora totalmente al di fuori di arcgis.
Curtis Price,

5

La mia soluzione è quella di impostare uno script di avvio che imposta il percorso in base all'ambiente python che si sta utilizzando. Questo metodo ha il (enorme) vantaggio di non avere bisogno dell'accesso di amministratore per scrivere file .pth nelle installazioni di Python. Questo script è configurato per utilizzare sia Anaconda a 32 bit che a 64 bit e ArcGIS / arcpy.

    # 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

Come stai impostando / chiamando questo script strartup per virtualenv in altri script .py? ad esempio, se hai solo uno script .py che è "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')"? Esempio semplificato ovviamente. Grazie per qualsiasi consiglio
AlexS1

3

Nel caso in cui qualcuno stia provando a farlo usando ArcGIS Pro (cioè con Python 3 invece di Python 2):

Uso spyder nel pacchetto anaconda. Il modo in cui l'ho fatto funzionare è andato su Strumenti> Python Interpreter in Spyder, quindi puntando Spyder sul file propy.bat che si trova attualmente in C: \ Programmi \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat.

Questo attiva la versione corretta di Python in Spyder e ti permette di importare arcpy.


1

Uso il seguente codice per configurare un ambiente virtuale separato , contenente arcpy e dipendenze:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.