Зробити окрему установку Python, яка може викликати ArcPy?


28

Я бачу багато запитань і запитань, як ви можете створити окрему установку Python (наприклад, дистрибутив Anaconda або Python XY), яка може використовувати arcpy, не «порушуючи» оригінальну установку ArcGIS python.

У мене була ця сама проблема, і я думаю, що знайшов «універсальне» рішення. Поки ми це робили на близько 8 комп’ютерах на роботі, і все це працює чудово.

Як встановити окремий дистрибутив Python, який може використовувати ArcGIS?

Відповіді:


37

Я створив невеликий (і відносно популярний) модуль, який вимикається і шукає ArcGIS на вашому ПК. Як тільки знайдете, він додає правильні шляхи до навколишнього середовища, щоб ви могли імпортувати arcpy. Використання йде так:

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

Тут розміщений модуль на github: https://github.com/JamesRamm/archook

Це дуже просто, і я впевнений, що його можна зробити більш надійним, але це робить свою роботу. Він доступний на піпі:pip install archook

Він має кілька переваг перед більш "ручним" оригінальним методом (детальніше нижче):

  1. Вам не потрібно конфігурувати кожне середовище python окремо ... просто імпортуйте модуль і відключіться
  2. Він не редагує / не створює жодних ключів реєстру чи змінних постійної середовища, тому немає шансів зіпсувати будь-яку існуючу конфігурацію python / arcgis.
  3. Вам не потрібно нічого знати про шляхи до різних папок / файлів або навіть про те, яку версію аркгізів ви встановили. Модуль знайде все для вас.
  4. Не потрібна автентифікація адміністратора
  5. Він не специфічний для анаконди - він буде працювати з будь-якою установкою пітона

Я залишив початкову відповідь нижче, але це рішення (ІМО) на 100% краще.


Відповідь 2014 року

Гаразд, така відповідь працює для дистрибуції Anaconda 64bit Python з ArcGIS 10.1 64bit на Windows 7 / Windows Server. Деякі (або всі) поради, наведені нижче, можуть застосовуватися до будь-якого іншого Windows-дистрибутива python. По-перше, встановіть анаконду, вона повинна перейти до каталогу C: \ Anaconda. Поставте прапорець "Зробити системний пітон за замовчуванням". Це може попередити, що інший пітон встановлений, але продовжуйте. Потім:

Шляхи налаштування та змінні середовища

Перше, що потрібно зробити - скопіювати файл DTBGGP64.pth у новий каталог розповсюдження ( C: \ Anaconda ) з C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-пакети . Ім'я є довідковим, але повинно мати розширення .pth Це дозволить вам імпортувати ArcPy при використанні нового дистрибутива. Примітка. Правильне розташування файлу DTBGGP64.pth має бути в каталозі пакунків-сайтів (наприклад, C: \ Anaconda \ Libs \ site-пакети ). Я виявив, що для деяких старих версій Anaconda він працює, якщо він знаходиться в каталозі верхнього рівня Далі, слід перевірити змінні середовища: У системній змінній Шлях, існуючий шлях до каталогу python слід замінити новим шляхом. (наприклад, C: \ Anaconda; C: \ Anaconda \ Scripts; ) Це покаже вікнам, де знаходиться каталог за замовчуванням python. Переконайтеся, що змінна користувача PYTHONPATH також правильна. Це повинно вказувати на будь-які бібліотеки, які ви хочете використовувати, які не описуються .pth файлами або встановлені в пакунках сайтів . IE це можуть бути ваші власні пакети розробки або такі пакети, як mapnik, які мають інше місце установки.

Перевірте Налаштування реєстру

На деяких машинах вищезазначеного може бути достатньо, щоб переконатися, що ви можете використовувати arcpy з нового python і що python можна використовувати в ArcGIS. На інших машинах вам може знадобитися перевірити ключі реєстру. У наступних ключах реєстру є налаштування python:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ PythonPath
Повинен бути один ключ, його значення повинно бути C: \ Anaconda \ Lib; C: \ Anaconda \ DLLs (Або відповідні папки для вашої установки python)

HKEY_LOCAL_MACHINE \ SOFTWARE \ Python \ PythonCore \ 2.7 \ InstallPath
Ключ повинен бути C: \ Anaconda

У вас можуть бути встановлені інші версії python ... у цьому випадку змініть номер версії у вищезазначених шляхах

HKEY_CLASSES_ROOT \ Python.CompiledFile \ DefaultIcon Це розташування файлу .ico, який використовується для .pyc файлів

HKEY_CLASSES_ROOT \ Python.CompiledFile \ shell \ open \ команда Ця команда видавати при відкритті .pyc-файлу з оболонки. Ви повинні змінити python.exeшлях до розташування потрібної версії пітона

HKEY_CLASSES_ROOT \ Python.File Ключі тут такі ж, як і для Python.CompiledFile, за винятком того, що вони стосуються файлу .py. Знову внесіть відповідні зміни. У ньому може бути додатковий ключ для "Редагувати за допомогою IDLE" або "Редагувати за допомогою Pythonwin". Знову ж таки, внесіть відповідні зміни, щоб шляхи в цих клавішах вказували на потрібну версію пітона.

HKEY_CLASSES_ROOT \ Python.NoConFile Це те саме, що і для Python.File, але слід вказати на pythonw.exeпрограму, де це доречно.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1 PythonDir точки ключ до установки пітона використання в ArcMap і т.д .. Ви можете для цього , щоб залишитися в якості установки пітона як встановлений на ESRI, або вказати його в нову установку. Це може зажадати інших змін , якщо ви вкажете ArcMap в нову установку пітона. Там можуть бути проблеми з версіями пакетів (наприклад , Numpy) , встановлених новим розподілом. Я жодного не стикався.

Для більшості моєї роботи це не має значення, оскільки я, як правило, хочу самостійно використовувати python і час від часу маю доступ до arcpy. Я дуже рідко бажаю використовувати python зсередини arcmap. Тому я мало тестував цей останній крок, але, здається, він працює для всього, що я намагався до цього часу.

Я думаю, що процес буде подібний до встановлення Python (x, y) тощо.

Інші примітки

Вміст файлу .pth - це список шляхів, що вказують на такі папки вашої установки ArcGIS: bin64, arcpy, ArcToolbox \ Scripts Наприклад, мій .pth файл містить таке:

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


Чи встановлює це встановлення всіх залежностей Python, які має ArcGIS? matplotlib, numpy, xlrd, xlwt та dateutil?
Хібма

Так. Для розповсюдження анаконди повний список пакетів можна знайти тут: docs.continuum.io/anaconda/pkgs.html Я не так знайомий з Python (x, y) або іншими дистрибутивами
Джеймс

2
Не забувайте, що ArcGIS (10.2 та 10.1) має дуже специфічні вимоги до версії для numpy - має бути 1.6.1, або ви можете зламати arcpy.
користувач2856

1
Будь ласка, додайте вміст файлу DTBGGP64.pth! Багато користувачів, схоже, цього не мають. :)
mmann1123

1
Дуже приємною особливістю анаконди є те, що ви можете налаштувати її у віртуальному середовищі з необхідними версіями для ArcGIS або будь-якого іншого пакета. Наприклад, у вас може бути створено віртуальне середовище для роботи з ArcGIS, яке має версії, на які очікують інструменти Esri, та іншу, яка не включає arcpy, коли повністю працює за межами arcgis.
Кертіс Ціна

5

Моє рішення - створити сценарій запуску, який встановлює шлях на основі середовища python, яке ви використовуєте. Цей метод має (величезну) перевагу в тому, що вам не потрібен доступ адміністратора для запису .pth файлів у програмах python. Цей сценарій налаштований на використання як 32-бітного, так і 64-бітного анаконда та 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

Як ви встановлюєте / викликаєте цей скрипт strartup для virtualenv в інших сценаріях .py? наприклад, якщо у вас просто є .py-скрипт, який є "arcpy.CopyFeatures_management ('myinput.shp', 'myoutput.shp')"? Спрощений приклад звичайно. Thx за будь-яку пораду
AlexS1

3

У випадку, якщо хтось намагається це зробити, використовуючи ArcGIS Pro (тобто з python 3 замість python 2):

Я використовую шпідери в межах пакету анаконда. Я працював над тим, щоб перейти до Інструменти> Інтерпретатор Python у Spyder, а потім вказати Spyder на файл propy.bat, який зараз знаходиться на C: \ Program Files \ ArcGIS \ Pro \ bin \ Python \ Scripts \ propy.bat.

Це активує правильну версію python у Spyder та дозволяє імпортувати arcpy.


1

Я використовую наступний код, щоб налаштувати окреме віртуальне середовище , що містить arcpy та його залежності:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.