스크립트를 편집 한 후 Python Addin을 다시 컴파일 하시겠습니까?


15

나는 몇 가지 파이썬 addin을 개발하고 있으며 스크립트를 편집 할 때마다 addin을 다시 컴파일하는 가장 좋은 방법이 무엇인지 궁금합니다.

현재 스크립트를 수정하면 수정해야 할 것 같습니다.

  1. ArcMap 닫기
  2. 내 addin 폴더로 이동하여 'makeaddin'python 파일을 두 번 클릭하십시오.
  3. 'Python Addin File을 두 번 클릭하십시오.
  4. 변경 사항을 적용하려면 ArcMap을 다시 시작하십시오.

이 단계를 수행하지 않으면 편집 내용이 인식되지 않습니다. 어딘가에 간단한 인쇄 라인을 배치하거나 결과를 테스트하기 위해 작은 편집을 수행 할 때 상당히 성 가시고 시간이 많이 걸립니다.

더 좋은 방법이 있습니까?

답변:


11

reload파이썬 에서 내장 함수를 사용 하여 모듈을 자동으로 다시로드 할 수 있습니다. 당신이 할 수있는 일은 다음과 같습니다

import mymodule

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

어디에 hook()ArcMap에 의해 mymodule호출되며 호출 사이에서 편집하는 모듈입니다. 실패하지 않도록 sys.path편집중인 모듈의 경로를 포함 하도록 편집해야 할 수도 있습니다 import mymodule. 또는 디렉토리 포함 site-packages(아마도 사용하여 python setup.py develop).


1
물론 이것은 개발하는 동안에 만 도움이 될 것입니다. ArcGIS 디자이너
cwa

이것이 내가하는 일입니다. 또한 임베디드 디버깅에 winpdb 를 사용 합니다.
blah238

제안 해 주셔서 감사합니다. 이것은 내 기술력을 약간 뛰어 넘습니다. 구현하기가 어렵습니까? 내가 배울 수있는 추가 정보가 있습니까?
Mike

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, 아니오 makeaddin.py 디렉토리에있는 별도의 .py 파일입니다
Paul

훌륭한 대본. 그러나 스크립트가 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 Ideas 에 대한 아이디어를 기록했으며 투표하고 의견을 남겼습니다.

ArcGIS 토론 포럼 스레드는 여기있습니다 .


1
답변에 관련 링크를 추가 할 수 있습니까?
blah238

나는 투표하고 싶었지만 @Mike가 언급 한 ArcGIS Idea를 찾을 수 없었습니다.
PolyGeo

죄송합니다. 지금까지이 답변을 보지 못했습니다. ArcGIS 웹 사이트에 대한 링크를 업데이트 한 @PolyGeo에게 감사합니다.
Mike

1

나는 일반적으로 두 가지 접근 방식을 사용합니다. 하나는 실제로 지오 프로세싱을 사용하는 도구에 대해 가져 오기를 허용 한 다음 대화 형 Python 세션을 reload(mymodule)설정하고 최신 변경 사항을 포함하도록 언급 한대로 수행 하는 것입니다 IPython에서 자동 새로 고침 ). Python 도구 상자 만 변경하는 경우 카탈로그보기에서 도구 상자를 마우스 오른쪽 단추로 클릭하고 '새로 고침'을 클릭하여 도구 상자를 다시로드 할 수 있습니다.

GUI에서 사용자 상호 작용이 필요한 코드의 경우 다음 배치 스크립트를 사용하여 프로세스 속도를 높입니다.

@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가 시작하는 것보다 'Add Add-in 설치'버튼을 클릭 할 수 있습니다. 또는 pause마지막 명령 앞에 ArcGIS를 시작하기 전에 입력을 기다릴 수 있습니다 .


1
당신은 사용할 수 ESRIRegAddIn.exe/s자동으로 추가 - 더를 설치하는 스위치. 내 컴퓨터에서 ESRIRegAddIn의 경로는 C:\Program Files (x86)\Common Files\ArcGIS\bin입니다.
blah238
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.