Biên dịch lại Python Addin sau khi chỉnh sửa tập lệnh?


15

Tôi đã phát triển một vài addins python và tôi chỉ tự hỏi đâu là cách tốt nhất để biên dịch lại addin bất cứ khi nào tôi chỉnh sửa script.

Hiện tại, nếu tôi thực hiện chỉnh sửa kịch bản, có vẻ như tôi phải

  1. Đóng ArcMap
  2. Chuyển đến thư mục Addin của tôi và nhấp đúp vào tệp python 'makeaddin'
  3. Nhấp đúp chuột vào 'Tệp Addin Python
  4. Khởi động lại ArcMap để các thay đổi có hiệu lực

Nếu tôi không thực hiện các bước này, thì các chỉnh sửa sẽ không được công nhận. Điều này trở nên khá khó chịu và tốn thời gian khi tôi muốn đặt một dòng in đơn giản ở đâu đó hoặc tôi thực hiện một chỉnh sửa nhỏ chỉ để kiểm tra kết quả.

Có cách nào tốt hơn để làm điều này?

Câu trả lời:


11

Bạn có thể sử dụng reloadhàm dựng sẵn trong python để tự động tải lại mô-đun của mình. Những gì bạn có thể làm là một cái gì đó như thế này:

import mymodule

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

nơi hook()là những gì được gọi là bởi ArcMap và mymodulelà module bạn đang chỉnh sửa giữa lời gọi. Bạn có thể phải chỉnh sửa sys.pathđể bao gồm đường dẫn của mô-đun bạn đang chỉnh sửa để import mymodulekhông thất bại. Hoặc bao gồm các thư mục trong site-packages(có thể sử dụng python setup.py develop).


1
Tất nhiên điều này sẽ chỉ hữu ích trong quá trình phát triển; Tôi tin rằng các nhà thiết kế ArcGIS có ý định cho bạn kiểm tra tập lệnh của mình trước khi xây dựng addin ( resource.arcgis.com/en/help/main/10.1/index.html#/
Thẻ

Đây là những gì tôi làm là tốt. Tôi cũng sử dụng winpdb để gỡ lỗi nhúng.
blah238

Cám ơn vì sự gợi ý. Đây là một chút vượt quá bộ kỹ năng của tôi. Có khó thực hiện không? Có bất kỳ thông tin nào thêm về điều này mà tôi có thể sử dụng để tìm hiểu?
Mike

1
Tôi là một nhà phát triển python với kinh nghiệm ArcGIS hạn chế, nhưng tôi đang học nó. Tôi sẽ cập nhật với nhiều chi tiết hơn sau khi tôi tìm ra chúng.
cwa

@ blah238 bạn đã cấu hình gỡ lỗi nhúng như thế nào? Addin của tôi sẽ kết nối nhưng giảm kết nối sau khi được tải.
ShaunLangley

8

Đề xuất của Per @ blah238, tập lệnh sau

  1. đóng ArcMap (nếu mở)
  2. tạo ra bổ trợ
  3. cài đặt bổ trợ âm thầm
  4. mở lại tài liệu ArcMap

Lưu vào thư mục chứa 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)

cái này có trong tệp PythonTool_addin.py của bạn không?
ShaunLangley

@ShaunLangley, không, đây là một tệp .py riêng biệt nằm trong thư mục của makeaddin.py
Paul

Kịch bản tuyệt vời. Tuy nhiên, như mong đợi, ArcMap rơi xuống khi tập lệnh cố gắng mở tệp .mxd bên ngoài ArcMap. Có một sửa chữa được biết đến này?
TheLastGIS

1
@TheLastGIS Vâng. Thêm các biến arcmap = "C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe"Map = '"{0}" {1} /s'.format(arcmap, mapdoc)ở trên. Rồi os.system(Map)sẽ thành công đâu os.system(mapdoc).
alphabetasoup

2

Tôi đã nhận được câu trả lời trên trang web ArcGIS. Rõ ràng đây là cách duy nhất để biên dịch lại addins python. Ai đó đã đăng nhập một ý tưởng về ArcGIS Ideas và tôi cũng đã bỏ phiếu và bình luận.

Chủ đề diễn đàn thảo luận ArcGIS được đặt ở đây .


1
Bạn có thể thêm các liên kết có liên quan đến câu trả lời của bạn?
blah238

Tôi muốn bỏ phiếu nhưng không thể tìm thấy Ý tưởng ArcGIS mà @Mike đề cập.
PolyGeo

Xin lỗi, tôi đã không thấy câu trả lời này cho đến bây giờ. Cảm ơn @PolyGeo đã cập nhật liên kết đến trang web ArcGIS.
Mike

1

Tôi thường sử dụng hai cách tiếp cận: một là, đối với bất kỳ công cụ nào bạn sử dụng thực sự chỉ là xử lý địa lý, cho phép chúng được nhập và sau đó bạn có thể thiết lập phiên Python tương tác và thực hiện reload(mymodule)như đã đề cập để bao gồm các thay đổi mới nhất (hoặc thiết lập tự động tải trong IPython ). Nếu bạn chỉ thực hiện thay đổi đối với hộp công cụ Python, bạn có thể tải lại hộp công cụ bằng cách nhấp chuột phải vào nó trong chế độ xem Danh mục và nhấp vào 'Làm mới'.

Đối với mã không yêu cầu tương tác người dùng trong GUI, tôi sử dụng tập lệnh bó sau để tăng tốc quá trình:

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

Trong đó myaddin.mxd có các lớp dữ liệu và bối cảnh mà tôi sử dụng cho dự án cụ thể. Việc này sẽ kích hoạt cài đặt addin và ArcMap đồng thời, nhưng tôi thường có thể nhấp vào nút 'Cài đặt bổ trợ' nhanh hơn so với ArcGIS bắt đầu. Ngoài ra, bạn có thể thêm pausetrước lệnh cuối cùng để đợi đầu vào trước khi bắt đầu ArcGIS.


1
Bạn có thể sử dụng ESRIRegAddIn.exevới công /stắc để cài đặt bổ trợ một cách im lặng. Đường dẫn đến ESRIRegAddIn trên máy của tôi là C:\Program Files (x86)\Common Files\ArcGIS\bin.
blah238
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.