स्क्रिप्ट एडिटिंग के बाद अजगर एडिन को फिर से संकलित करना?


15

मैं कुछ अजगर एडिंस विकसित कर रहा हूं और मैं अभी सोच रहा हूं कि किसी भी समय मैं स्क्रिप्ट को संपादित करने के लिए एडिन को फिर से संकलित करने का सबसे अच्छा तरीका क्या है।

वर्तमान में, यदि मैं स्क्रिप्ट का संपादन करता हूं, तो ऐसा लगता है जैसे मुझे करना है

  1. चापाकल बंद करो
  2. मेरे ऐडिन फ़ोल्डर में जाएं और 'makeaddin' पायथन फाइल पर डबल क्लिक करें
  3. डबल क्लिक करें 'अजगर Addin फ़ाइल
  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 डिजाइनरों का इरादा आप ऐड (निर्माण से पहले अपनी स्क्रिप्ट का परीक्षण करने के लिए resources.arcgis.com/en/help/main/10.1/index.html#/... )
Cwa

यही मैं भी करता हूं। मैं भी एम्बेडेड डीबगिंग के लिए winpdb का उपयोग करता हूं ।
blah238

सलाह के लिये धन्यवाद। यह मेरे कौशल सेट से थोड़ा परे है। क्या इसे लागू करना मुश्किल है? क्या इस बारे में कोई और जानकारी है जिसे मैं सीखने के लिए उपयोग कर सकता हूं?
माइक

1
मैं सीमित ArcGIS अनुभव के साथ एक अजगर डेवलपर हूं, लेकिन मैं इसे सीख रहा हूं। उनका पता लगाने के बाद मैं अधिक विवरणों के साथ अपडेट करूंगा।
cwa

@ blah238 आपने एम्बेडेड डिबगिंग को कैसे कॉन्फ़िगर किया? मेरा ऐडइन कनेक्ट होगा, लेकिन लोड होने के बाद कनेक्शन को छोड़ देता है।
ShaunLangley

8

प्रति @ blah238 का सुझाव, निम्न स्क्रिप्ट

  1. बंद कर देता है आर्केप (अगर खुला)
  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, नहीं, यह एक अलग .py फ़ाइल है, जो makeaddin.py
Paul

महान स्क्रिप्ट। हालाँकि, उम्मीद के मुताबिक, ArcMap तब खत्म हो जाता है जब स्क्रिप्ट ArcMap के बाहर .mxd फ़ाइल को खोलने का प्रयास करती है। क्या इसके लिए कोई ज्ञात निर्धारण है?
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)नहीं है।
अल्फाबेटसॉउप

2

मुझे आर्कजीआईएस वेबसाइट पर एक उत्तर मिला। जाहिरा तौर पर यह अजगर addins को फिर से संकलित करने का एकमात्र तरीका है। किसी ने ArcGIS आइडियाज पर एक आइडिया लॉग इन किया है और मैंने वोट किया है और साथ ही कमेंट भी किया है।

ArcGIS चर्चा मंच धागा यहाँ स्थित है


1
क्या आप अपने उत्तर के लिए प्रासंगिक लिंक जोड़ सकते हैं?
blah238

मैं वोट करना चाहता था लेकिन आर्कजी आइडिया नहीं पा सका कि @ मायके का उल्लेख है।
PolyGeo

क्षमा करें, मैंने अब तक यह उत्तर नहीं देखा। ArcGIS वेबसाइट के लिंक को अपडेट करने के लिए @PolyGeo को धन्यवाद।
माइक

1

मैं आम तौर पर दो दृष्टिकोणों का उपयोग करता हूं: एक है, आपके द्वारा उपयोग किए जाने वाले किसी भी उपकरण के लिए जो वास्तव में सिर्फ जियोप्रोसेसिंग हैं, उन्हें आयात करने की अनुमति दें, और फिर आप एक इंटरैक्टिव पायथन सत्र सेट कर सकते हैं, और reload(mymodule)नवीनतम परिवर्तनों को शामिल करने के लिए उल्लेख करें (या सेट करें) ऑटोरिलैड इन आईपीथॉन )। यदि आप केवल पायथन टूलबॉक्स में परिवर्तन कर रहे हैं, तो आप टूलबॉक्स को कैटलॉग दृश्य में राइट क्लिक करके और 'रिफ्रेश' पर क्लिक करके पुनः लोड कर सकते हैं।

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 में डेटा लेयर्स और संदर्भ हैं जो मैं विशिष्ट प्रोजेक्ट के लिए उपयोग करता हूं। यह एक साथ एडिन इंस्टाल और आर्कमैप को आग देगा, लेकिन मैं आमतौर पर आर्कगिस शुरू होने की तुलना में तेजी से 'ऐड-इन' बटन पर क्लिक कर सकता हूं। वैकल्पिक रूप से, आप pauseआर्कजीआईएस शुरू करने से पहले इनपुट की प्रतीक्षा करने के लिए अंतिम कमांड से पहले जोड़ सकते हैं ।


1
आप चुपचाप ऐड-इन स्थापित करने के ESRIRegAddIn.exeलिए /sस्विच के साथ उपयोग कर सकते हैं । मेरी मशीन पर ESRIRegAddIn का रास्ता है C:\Program Files (x86)\Common Files\ArcGIS\bin
blah238
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.