Делаете отдельную установку 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

Это очень просто, и я уверен, что можно сделать более надежным, но это делает работу. Доступно на pypi:pip install archook

Он имеет несколько преимуществ по сравнению с более «ручным» оригинальным методом (подробно описано ниже):

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

Я оставил оригинальный ответ ниже, но это решение (IMO) на 100% лучше.


Ответ 2014

Итак, этот ответ работает для дистрибутива Anaconda 64bit Python с ArcGIS 10.1 64bit на Windows 7 / Windows Server. Некоторые из (или все) приведенных ниже советов могут относиться к любому другому дистрибутиву Windows для Python. Сначала установите anaconda, она должна перейти в каталог C: \ Anaconda. Установите флажок «сделать системный стандартный Python». Это может дать предупреждение, что установлен другой питон, но продолжайте. Затем:

Пути установки и переменные среды

Первое, что нужно сделать, это скопировать файл DTBGGP64.pth в новый дистрибутивный каталог ( C: \ Anaconda ) из C: \ Python27 \ ArcGISx6410.1 \ Lib \ site-packages . Именование является произвольным, но должно иметь расширение .pth. Это позволит вам импортировать ArcPy при использовании нового дистрибутива. Примечание. Правильное расположение файла DTBGGP64.pth должно находиться в каталоге site-packages (например, C: \ Anaconda \ Libs \ site-packages ). Я обнаружил, что в некоторых старых версиях Anaconda он работает, если он находится в каталоге верхнего уровня. Далее необходимо проверить переменные среды: в системной переменной Pathсуществующий путь к каталогу python должен быть заменен новым путем. (например, C: \ Anaconda; C: \ Anaconda \ Scripts; ) Это сообщит Windows, где находится каталог по умолчанию для python. Убедитесь, что переменная пользователя PYTHONPATH также верна. Это должно указывать на любые библиотеки вы хотите использовать, не описанные .pth файлов или установленные в сайте-пакетах . То есть это могут быть ваши собственные пакеты разработки или пакеты, такие как mapnik, которые имеют другое место установки.

Проверьте настройки реестра

На некоторых машинах этого может быть достаточно для того, чтобы вы могли использовать arcpy из нового питона и чтобы он мог использоваться в 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 \ command Эта команда запускается при открытии файла .pyc из оболочки. Вы должны изменить python.exeпуть к местоположению желаемой версии Python

HKEY_CLASSES_ROOT \ Python.File Ключи здесь такие же, как и для Python.CompiledFile, за исключением того, что они применяются к файлу .py. Опять внесите соответствующие изменения. Может иметь дополнительный ключ для «Редактировать с IDLE» или «Редактировать с Pythonwin». Снова внесите соответствующие изменения, чтобы пути в этих ключах указывали на желаемую версию Python.

HKEY_CLASSES_ROOT \ Python.NoConFile Они такие же, как для Python.File, но должны указывать на pythonw.exeпрограмму, где это необходимо.

HKEY_LOCAL_MACHINE \ SOFTWARE \ ESRI \ Python10.1 PythonDir точки ключ к установке питона использования в ArcMap и т.д .. Вы можете для этого , чтобы остаться в качестве установки питона как установленный на ESRI, или указать его в новую установку. Это может потребовать других изменений, если вы укажете ArcMap на новую установку Python. Там могут быть проблемы с версиями пакетов (например , 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?
Хибма

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

2
Не забывайте, что ArcGIS (10.2 и 10.1) предъявляет особые требования к версии для numpy - должно быть 1.6.1, иначе вы можете сломать arcpy.
user2856

1
Пожалуйста, добавьте содержимое файла DTBGGP64.pth! Многие пользователи, кажется, не имеют этого. :)
mmann1123

1
Отличная особенность anaconda - вы можете настроить ее в виртуальных средах с версиями, необходимыми для ArcGIS или любого другого пакета. Например, у вас может быть настроена виртуальная среда для работы с ArcGIS с версиями, ожидаемыми инструментами Esri, и другая, которая не включает arcpy при работе полностью вне arcgis.
Кертис Прайс

5

Мое решение состоит в том, чтобы установить сценарий запуска, который устанавливает путь в зависимости от среды Python, которую вы используете. Этот метод имеет (огромное) преимущество в том, что вам не нужен доступ администратора для записи файлов .pth в установках python. Этот скрипт настроен на использование как 32-битной, так и 64-битной Anaconda и 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')"? Упрощенный пример конечно. Спасибо за любой совет
AlexS1

3

В случае, если кто-то пытается сделать это, используя ArcGIS Pro (т.е. с python 3 вместо python 2):

Я использую Spyder в пакете анаконды. Я получил это, перейдя в Инструменты> Интерпретатор 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.