Wykonujesz osobną instalację Pythona, która może wywoływać ArcPy?


28

Widzę wiele pytań i odpowiedzi na pytania, w jaki sposób można utworzyć osobną instalację Pythona (np. Dystrybucję Anaconda lub Python XY), która może korzystać z Arcpy, ale nie „łamie” oryginalnej instalacji Python ArcGIS.

Miałem ten sam problem i myślę, że znalazłem „uniwersalne” rozwiązanie. Do tej pory zrobiliśmy to na około 8 komputerach w pracy i wszystko działa dobrze.

Jak zainstalować osobną dystrybucję Python, która może korzystać z ArcGIS?

Odpowiedzi:


37

Stworzyłem mały (i stosunkowo popularny) moduł, który uruchamia się i poluje na ArcGIS na twoim komputerze. Po znalezieniu dodaje poprawne ścieżki do środowiska, dzięki czemu można importować Arcpy. Wykorzystanie wygląda następująco:

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

Moduł znajduje się na github tutaj: https://github.com/JamesRamm/archook

Jest to bardzo proste i jestem pewien, że można go wzmocnić, ale spełnia swoje zadanie. Jest dostępny na pypi:pip install archook

Ma kilka zalet w porównaniu z bardziej „ręczną” oryginalną metodą (opisaną poniżej):

  1. Nie musisz konfigurować każdego środowiska Pythona osobno ... wystarczy zaimportować moduł i gotowe
  2. Nie edytuje / nie tworzy kluczy rejestru ani stałych zmiennych środowiskowych, więc nie ma szans na popsucie żadnej istniejącej konfiguracji python / arcgis.
  3. Nie musisz nic wiedzieć o ścieżkach do różnych folderów / plików ani nawet o tym, jaką wersję Arcgis zainstalowałeś. Moduł znajdzie to wszystko dla Ciebie.
  4. Nie wymaga uwierzytelnienia administratora
  5. Nie jest to specyficzne dla anakondy - będzie działać z każdą instalacją Pythona

Oryginalną odpowiedź zostawiłem poniżej, ale to rozwiązanie jest (IMO) o 100% lepsze.


Odpowiedź z 2014 r

Ok, więc ta odpowiedź działa dla 64-bitowej dystrybucji Python Anaconda z ArcGIS 10.1 64-bitowym na Windows 7 / Windows Server. Niektóre (lub wszystkie) z podanych poniżej wskazówek mogą dotyczyć każdej innej dystrybucji Pythona w systemie Windows. Najpierw zainstaluj anakondę, powinna ona przejść do katalogu C: \ Anaconda. Zaznacz pole „Ustaw system jako domyślny python”. Może to dać ostrzeżenie, że jest zainstalowany inny python, ale kontynuuj. Następnie:

Ścieżki konfiguracji i zmienne środowiskowe

Pierwszą rzeczą do zrobienia jest skopiowanie pliku DTBGGP64.pth do nowego katalogu dystrybucyjnego ( C: \ Anaconda ) z C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-packages . Nazewnictwo jest dowolne, ale musi mieć rozszerzenie .pth. Pozwoli to zaimportować ArcPy podczas korzystania z nowej dystrybucji. Uwaga: Prawidłowa lokalizacja pliku DTBGGP64.pth powinna znajdować się w katalogu site-packages (np. C: \ Anaconda \ Libs \ site-packages ). Zauważyłem, że w niektórych starszych wersjach Anacondy działa, jeśli znajduje się w katalogu najwyższego poziomu. Następnie należy sprawdzić zmienne środowiskowe: w zmiennej systemowej Ścieżka, istniejąca ścieżka do katalogu python powinna zostać zastąpiona nową ścieżką. (np. C: \ Anaconda; C: \ Anaconda \ Scripts; ) To powie Windowsowi, gdzie jest domyślny katalog Pythona. Upewnij się, że zmienna użytkownika PYTHONPATH jest również poprawna. Powinno to wskazywać na biblioteki, których chcesz używać, które nie są opisane w plikach .pth lub są zainstalowane w pakietach witryn . IE może to być twoje własne pakiety programistyczne lub pakiety takie jak mapnik, które mają inne miejsce instalacji.

Sprawdź ustawienia rejestru

Na niektórych komputerach powyższe może być wystarczające, aby zapewnić możliwość korzystania z Arcpy z nowego Pythona i że Pythona można używać w ArcGIS. Na innych komputerach może być konieczne sprawdzenie kluczy rejestru. Następujące klucze rejestru mają ustawienia języka Python:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Powinien istnieć jeden klucz, a jego wartość powinna wynosić C: \ Anaconda \ Lib; C: \ Anaconda \ DLLs (lub odpowiednie foldery do instalacji Pythona)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
Kluczem powinno być C: \ Anaconda

Możliwe, że masz zainstalowane inne wersje Pythona ... w takim przypadku zmień numer wersji w powyższych ścieżkach

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Jest to lokalizacja pliku .ico, który ma być używany dla plików .pyc

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ command To polecenie, które należy wydać podczas otwierania pliku .pyc z powłoki. Powinieneś zmienić python.exeścieżkę do lokalizacji żądanej wersji Pythona

HKEY_CLASSES_ROOT \ Python.File Klucze tutaj są takie same jak klucze dla Python.CompiledFile, tyle że dotyczą one pliku .py. Ponownie wprowadź odpowiednie zmiany. Może mieć dodatkowy klucz „Edycja z IDLE” lub „Edycja z Pythonwin”. Ponownie wprowadź odpowiednie zmiany, aby ścieżki w tych kluczach wskazywały żądaną wersję języka Python.

HKEY_CLASSES_ROOT \ Python.NoConFile Są one takie same jak w przypadku Python.File, ale powinny wskazywać pythonw.exeprogram w stosownych przypadkach.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1 PythonDir punkty klucz do instalacji Pythona do stosowania w ArcMap itp .. Można życzyć tego, aby pozostać w instalacji Pythona jako zainstalowane przez ESRI, lub skierować go do nowej instalacji. Może to wymagać innych zmian, jeśli wskażesz ArcMap na nową instalację Pythona. Nie mogą być problemy z wersjami pakietów (np NumPy) zainstalowanych przez nową dystrybucję. Nie spotkałem żadnego.

W przypadku większości moich prac nie ma to znaczenia, ponieważ zazwyczaj chcę używać Pythona samodzielnie, a czasami mam dostęp do arcpy. Rzadko chcę używać Pythona z poziomu arcmap. Dlatego niewiele testowałem tego ostatniego kroku, ale wydaje się, że działa ono na wszystko, co do tej pory próbowałem.

Wyobrażam sobie, że proces ten byłby podobny do instalacji Pythona (x, y) itp.

Inne notatki

Zawartość pliku .pth to lista ścieżek wskazujących następujące foldery w instalacji ArcGIS: bin64, arcpy, ArcToolbox \ Scripts Na przykład mój plik .pth zawiera następujące elementy:

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


Czy to instaluje wszystkie zależności Python, które ma ArcGIS? matplotlib, numpy, xlrd, xlwt i dateutil?
KHibma

Tak. W przypadku dystrybucji anaconda pełną listę pakietów można znaleźć tutaj: docs.continuum.io/anaconda/pkgs.html Nie znam tak dobrze Python (x, y) ani innych dystrybucji
James

2
Nie zapominaj, że ArcGIS (10.2 i 10.1) ma bardzo specyficzne wymagania dotyczące wersji dla numpy - musi to być 1.6.1, inaczej możesz złamać arcpy.
user2856

1
Dodaj zawartość pliku DTBGGP64.pth! Wydaje się, że wielu użytkowników tego nie ma. :)
mmann1123,

1
Naprawdę fajną funkcją anakondy jest to, że możesz skonfigurować ją w środowiskach wirtualnych z wersjami, których potrzebujesz do ArcGIS lub dowolnego innego pakietu. Na przykład, możesz mieć skonfigurowane wirtualne środowisko do pracy z ArcGIS, które ma wersje, których oczekują narzędzia Esri, i inną, która nie zawiera arcpy, gdy pracujesz całkowicie poza Arcgis.
Curtis Price

5

Moim rozwiązaniem jest skonfigurowanie skryptu uruchamiania, który ustawia ścieżkę na podstawie używanego środowiska python. Ta metoda ma tę (ogromną) zaletę, że nie potrzebujesz dostępu administratora do zapisu plików pth w instalacjach Pythona. Ten skrypt jest skonfigurowany do używania zarówno 32-bitowej, jak i 64-bitowej wersji Anaconda i 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

Jak ustawiasz / wywołujesz ten skrypt Strartup dla virtualenv w innych skryptach .py? na przykład, jeśli masz tylko skrypt .py „arcpy.CopyFeatures_management („ myinput.shp ”,„ myoutput.shp ”)? Oczywiście uproszczony przykład. Dziękuję za wszelkie porady
AlexS1

3

W przypadku, gdy ktoś próbuje to zrobić za pomocą ArcGIS Pro (tj. Z python 3 zamiast python 2):

Używam spydera w pakiecie anakondy. Sposób, w jaki do tego doszedłem, to przejście do Narzędzia> Python Interpreter w Spyder, a następnie wskazanie Spyderowi na plik propy.bat znajdujący się obecnie w C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat.

Aktywuje to poprawną wersję Pythona w Spyder i umożliwia importowanie Arcpy.


1

Używam następującego kodu, aby skonfigurować osobne środowisko wirtualne , zawierające archpy i jego zależności:

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.