Komut dosyasını düzenledikten sonra Python Addin yeniden derleniyor mu?


15

Birkaç python eklentisi geliştiriyorum ve sadece komut dosyasını düzenlediğimde eklentiyi yeniden derlemenin en iyi yolunun ne olduğunu merak ediyorum.

Şu anda, senaryoda bir düzenleme yaparsam,

  1. ArcMap'i kapat
  2. Eklentim klasörüne gidin ve 'makeaddin' python dosyasına çift tıklayın
  3. 'Python Addin Dosyasına çift tıklayın
  4. Değişikliklerin yürürlüğe girmesi için ArcMap'i yeniden başlatın

Bu adımları yapmazsam düzenlemeler tanınmaz. Bir yere basit bir baskı hattı yerleştirmek istediğimde bu oldukça can sıkıcı ve zaman alıcı oluyor ya da sadece bir sonucu test etmek için küçük bir düzenleme yapıyorum.

Bunu yapmanın daha iyi bir yolu var mı?

Yanıtlar:


11

reloadModülünüzü otomatik olarak yeniden yüklemek için python'da yerleşik işlevi kullanabilirsiniz . Yapabileceğiniz şey şudur:

import mymodule

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

nerede hook()ArcMap'te ziyerete denir ve mymodulesiz etkinleştirilmelerinde arasında düzenlediğiniz modülüdür. Başarısız olmamak için düzenlediğiniz sys.pathmodülün yolunu eklemek üzere düzenlemeniz gerekebilir import mymodule. Veya dizini içine ekleyin site-packages(belki de kullanarak python setup.py develop).


1
Tabii ki bu sadece geliştirme sırasında yardımcı olacaktır; ArcGIS tasarımcılarının,
eklentiyi

Ben de öyle yapıyorum. Ayrıca gömülü hata ayıklama için winpdb kullanıyorum .
blah238

Önerin için teşekkürler. Bu, beceri setimin biraz ötesinde. Uygulaması zor mu? Bu konuda öğrenmek için kullanabileceğim daha fazla bilgi var mı?
Mike

1
ArcGIS deneyimi sınırlı bir python geliştiricisiyim ama öğreniyorum. Onları anladıktan sonra daha fazla ayrıntıyla güncelleyeceğim.
cwa

@ blah238 Katıştırılmış hata ayıklamayı nasıl yapılandırdınız? Eklentim bağlanacak ancak yüklendikten sonra bağlantıyı kesecek.
ShaunLangley

8

Per @ blah238'in önerisi, aşağıdaki senaryo

  1. ArcMap'i kapatır (açıksa)
  2. Eklenti oluşturur
  3. Eklentiyi sessizce yükler
  4. ArcMap belgesini yeniden açar

Makeaddin.py dizinine kaydet:

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)

bu PythonTool_addin.py dosyanıza dahil mi?
ShaunLangley

@ShaunLangley, hayır bu makeaddin.py dizininde bulunan ayrı bir .py dosyası
Paul

Harika senaryo. Ancak, komut dosyası .mxd dosyasını ArcMap dışında açmaya çalıştığında ArcMap beklendiği gibi düşer. Bunun bilinen bir çözümü var mı?
TheLastGIS

1
@TheLastGIS Evet. Değişkenleri arcmap = "C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe"ve Map = '"{0}" {1} /s'.format(arcmap, mapdoc)yukarıdakileri ekleyin . Sonra os.system(Map)başarılı olamayacak nerede os.system(mapdoc).
alphabetasoup

2

ArcGIS web sitesinde bir cevap aldım. Görünüşe göre bu, python eklentilerini yeniden derlemenin tek yoludur. Birisi ArcGIS Fikirleri hakkında bir fikir kaydetti ve ben de oy verdim ve yorum yaptım.

ArcGIS Tartışma Forumu dizisi burada yer almaktadır .


1
Cevabınıza ilgili bağlantıları ekleyebilir misiniz?
blah238

Oy vermek istedim ama @Mike'ın bahsettiği ArcGIS Fikirini bulamadım.
PolyGeo

Üzgünüm, şu ana kadar bu cevabı görmedim. ArcGIS web sitesine bağlantıyı güncellediğiniz için @PolyGeo'ya teşekkürler.
Mike

1

Genellikle iki yaklaşım kullanıyorum: birincisi, kullandığınız herhangi bir araç için gerçekten coğrafi işleme, bunların içe aktarılmasına izin veriyor ve sonra etkileşimli bir Python oturumu ayarlayabilir ve reload(mymodule)en yeni değişiklikleri dahil etmek için belirtildiği gibi yapabilirsiniz (veya IPython'da otomatik yeniden yükleme ). Sadece bir Python araç kutusunda değişiklik yapıyorsanız, araç kutusunu Katalog görünümünde sağ tıklayıp 'Yenile'yi tıklayarak yeniden yükleyebilirsiniz.

GUI'de kullanıcı etkileşimi gerektiren kod için, işlemi hızlandırmak için aşağıdaki toplu komut dosyasını kullanıyorum:

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

Burada myaddin.mxd, belirli proje için kullandığım veri katmanlarına ve içeriğe sahip. Bu, eklenti yüklemesini ve ArcMap'ı aynı anda tetikleyecektir, ancak genellikle 'Eklentiyi Yükle' düğmesine ArcGIS'in başlamasından daha hızlı tıklayabilirim. Alternatif olarak, pauseArcGIS'i başlatmadan önce girişi beklemek için son komuttan önce ekleyebilirsiniz .


1
Eklentiyi sessiz bir şekilde kurmak için anahtarla ESRIRegAddIn.exebirlikte kullanabilirsiniz /s. Makinemdeki ESRIRegAddIn yolu C:\Program Files (x86)\Common Files\ArcGIS\bin.
blah238
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.