Перекомпілювати Python Addin після редагування сценарію?


15

Я розробляв кілька пітонних добавок, і мені просто цікаво, який найкращий спосіб перекомпілювати додаток у будь-який час, коли я редагую сценарій.

В даний час, якщо я редагую сценарій, мені здається, що треба

  1. Закрийте ArcMap
  2. Перейдіть у папку Мій додаток та двічі клацніть файл python 'makeaddin'
  3. Двічі клацніть на файлі "Додати пітон Python"
  4. Перезапустіть ArcMap, щоб зміни вступили в силу

Якщо я не виконую ці кроки, зміни не розпізнаються. Це стає дуже дратівливим і трудомістким, коли я хочу десь розмістити, можливо, просту лінію друку, або я пророблю невелику редагування, щоб перевірити результат.

Чи є кращий спосіб зробити це?

Відповіді:


11

Ви можете використовувати вбудовану reloadфункцію в python для автоматичного перезавантаження модуля. Що ви можете зробити, це щось подібне:

import mymodule

def hook():
    reload(mymodule)
    mymodule.myfunction()

де hook()називається ArcMap і mymoduleє модуль, який ви редагуєте між викликами. Можливо, вам доведеться відредагувати, sys.pathщоб включити шлях модуля, який ви редагуєте, щоб це import mymoduleне відбулося . Або включіть каталог site-packages(можливо, використовуючи python setup.py develop).


1
Звичайно, це було б корисно лише під час розвитку; Я вважаю, що дизайнери ArcGIS мають намір перевірити свій сценарій перед тим, як створити addin ( resource.arcgis.com/en/help/main/10.1/index.html#/… )
cwa

Це я і роблю. Я також використовую winpdb для вбудованої налагодження.
blah238

Дякую за пропозицію. Це трохи вище мого набору навичок. Це важко здійснити? Чи є додаткова інформація про це, яку я можу використати для вивчення?
Майк

1
Я розробник пітонів з обмеженим досвідом ArcGIS, але я це вчу. Я оновлю більш детальну інформацію після того, як я розберу їх.
cwa

@ blah238 як ви налаштували вбудовану налагодження? Мій аддін підключиться, але припинить з'єднання після завантаження.
ShaunLangley

8

За пропозицією @ blah238 наступний сценарій

  1. закриває ArcMap (якщо відкрито)
  2. створює надбудову
  3. встановлює надбудову безшумно
  4. знову відкриває документ ArcMap

Збережіть у каталозі, що містить makeaddin.py:

import os

#Location of ESRIRegAddIn.exe
esri = "C:/Program Files (x86)/Common Files/ArcGIS/bin/ESRIRegAddIn.exe"
cwd = os.getcwd()
mapdoc = <path to mxd>

#Close ArcMap if it is open
try:    os.system("TASKKILL /F /IM ArcMap.exe")
except:    pass

#Create ESRI Add-in file
os.system(os.path.join(cwd, "makeaddin.py"))

#Silently install Add-in file. The name of the file is based on folder it's located in.
os.system('"{0}" {1} /s'.format(esri, os.path.split(cwd)[-1] + ".esriaddin"))

#Open test map document.
os.system(mapdoc)

це включено у ваш файл PythonTool_addin.py?
ShaunLangley

@ShaunLangley, ні, це окремий .py файл, що знаходиться в каталозі makeaddin.py
Павло

Чудовий сценарій. Однак, як і очікувалося, ArcMap перепадає, коли сценарій намагається відкрити .mxd файл поза ArcMap. Чи є відоме виправлення цього?
TheLastGIS

1
@TheLastGIS Так. Додайте змінні arcmap = "C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe"та Map = '"{0}" {1} /s'.format(arcmap, mapdoc)вищезазначені. Тоді os.system(Map)вдасться там, де os.system(mapdoc)цього немає.
alphabetasoup

2

Я отримав відповідь на веб-сайті ArcGIS. Мабуть, це єдиний спосіб перекомпілювати пітон-добавки. Хтось записав ідею про ідеї ArcGIS, і я також проголосував і прокоментував.

Тут розміщена тема дискусійного форуму ArcGIS .


1
Чи можете ви додати відповіді до вашої відповіді?
blah238

Я хотів проголосувати, але не зміг знайти ідею ArcGIS, яку згадує @Mike.
PolyGeo

На жаль, я ще не бачив цієї відповіді. Дякуємо @PolyGeo за оновлення посилання на веб-сайт ArcGIS.
Майк

1

Я, як правило, використовую два підходи: один полягає в тому, що для будь-яких використовуваних вами інструментів, які насправді є просто геопроцесорними, дозволяють імпортувати їх, а потім ви можете налаштувати інтерактивний сеанс Python, і виконайте, reload(mymodule)як було зазначено, щоб включити новітні зміни (або налаштувати автозавантаження в IPython ). Якщо ви просто вносите зміни до панелі інструментів Python, ви можете перезавантажити панель інструментів, клацнувши її правою кнопкою миші у вікні Каталог та натисніть «Оновити».

Для коду, який вимагає взаємодії з користувачем у графічному інтерфейсі, я використовую такий пакетний сценарій, щоб прискорити процес:

@echo off
echo building...
python makeaddin.py
echo installing...
start myaddin.esriaddin
echo load ArcMap...
start %HOMEDRIVE%%HOMEPATH%\Documents\ArcGIS\myaddin.mxd

Там, де myaddin.mxd має рівні даних та контекст, який я використовую для конкретного проекту. Це дозволить одночасно запустити встановлення додатка та ArcMap, але я зазвичай можу натиснути кнопку "Встановити надбудову" швидше, ніж запуститься ArcGIS. Крім того, ви можете додати pauseдо останньої команди, щоб зачекати на введення до запуску ArcGIS.


1
Ви можете використовувати ESRIRegAddIn.exeза допомогою /sперемикача беззвучне встановлення надбудови. Шлях до ESRIRegAddIn на моїй машині C:\Program Files (x86)\Common Files\ArcGIS\bin.
blah238
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.