ArcGIS में पायथन टूलबॉक्स (.pyt) के आयोजन के लिए दिशानिर्देश


17

मेरे एक कार्य के लिए मुझे तीन टूल (अजगर स्क्रिप्ट) के साथ एक टूलबॉक्स बनाने की आवश्यकता है।

साधारण tbx के बजाय मैंने इसे पायथन टूलबॉक्स (pyt) के रूप में लिखने का फैसला किया है।

कोड को व्यवस्थित करने के "अच्छे" तरीके को छोड़कर सब कुछ स्पष्ट है।

जैसा कि मेरे पास तीन उपकरण हैं, उन्हें एक फ़ाइल (पाइट) में संग्रहीत करने का यह अच्छा तरीका नहीं है। इसलिए, मैंने प्रत्येक उपकरण को एक अलग .py फ़ाइल में रखने का निर्णय लिया है।

यहाँ एक समस्या है: सर्वर के लिए आर्कगिस पर वितरण या तैनाती के लिए पीआईटी के साथ कई फाइलों को व्यवस्थित करने का अच्छा तरीका क्या है? क्या मुझे उन्हें PYT फ़ाइल के साथ समान स्तर पर रखना चाहिए या क्या मुझे उन्हें कुछ उपनिर्देशिका (यानी "टूल") में रखना चाहिए?

क्या आप किसी Esri दिशानिर्देश या संदर्भ "बड़े PYT टूलबॉक्स" नमूने की सिफारिश कर सकते हैं?

मुझे इस विषय पर कुछ भी नहीं मिला है। 10.0 संस्करण में तथाकथित टूलकिट फ़ोल्डर संरचना थी जिसे मैंने उपयोग किया है।

यह कोडिंग की शैली का अधिक प्रश्न है। क्योंकि 500-1000 या उससे अधिक लाइनों वाली एक PYT फाइल बनाने का विचार मुझे अच्छा नहीं लगता है और मेरा मानना ​​है कि यह "पायथोनिक" तरीका नहीं है।


1
"500-1000 या उससे अधिक लाइनों वाली एक PYT फ़ाइल बनाने का विचार मुझे अच्छा नहीं लगता है"। आप अकेले नहीं हैं, एलेक्स। आज मैंने तुरंत कहा कि .पीट बीमार दिमाग का आविष्कार है। और मुझे इसका पछतावा नहीं होगा।
रेमिजिजस पनकेविसियस

जवाबों:


17

पर एक नजर डालें इस सूत्र ArcGIS मंच पर। मूल रूप से सिर्फ मानक अजगर मॉड्यूल या एक पैकेज संरचना का उपयोग करें और अपने उपकरणों को अजगर टूलबॉक्स में आयात करें।

कुछ इस तरह:

#  \--SomeDir
#     |  toolbox.pyt
#     \--toolpackage
#        |  __init__.py
#        |  script_a.py
#        |  script_b.py


#----------------------------
#The .pyt file
#----------------------------

import arcpy
import toolpackage.script_a.Tool1 as Tool1
import toolpackage.script_a.Tool2 as Tool2
import toolpackage.script_b.Tool3 as Tool3

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "MultiTool Toolbox"
        self.alias = "mtt"

        # List of tool classes associated with this toolbox
        self.tools = [Tool1, Tool2, Tool3]

मैंने पाया है कि यह आर्कजीआईएस डेस्कटॉप में ठीक काम करता है, लेकिन जब आर्कगिस सर्वर उदाहरण में जियोप्रोसेसिंग सेवा प्रकाशित करता है तो यह .pyt फ़ाइल के अलावा सभी स्क्रिप्ट और पैकेज खो देता है। स्क्रिप्ट को तैनाती में मैन्युअल रूप से छोड़ना संभव हो सकता है, लेकिन इससे जटिलता बढ़ जाती है।
गन्नत

3
@ गनत हाँ, ल्यूक के विचार भी मेरे अनुभव हैं। ESRI की प्रकाशन सेवाएँ from x import yशैली आयातों में से किसी को भी नहीं पहचानती हैं । (यह पूरी तरह से हास्यास्पद है, वैसे)। हालांकि, मेरा मानना ​​है कि आप अपनी self.toolsपरिभाषा को अकेले छोड़ सकते हैं और उपयोग कर सकते हैं import toolpackage.script_a.Tool1 as Tool1
jpmc26

1
उपनाम छोटा होना चाहिए और इसमें केवल अक्षर शामिल होने चाहिए, जैसे कि self.alias = "mtt"
कर्टिस प्राइस

2
चूँकि मैंने अपने टूल कोड में बदलाव करते हुए सिर्फ एक घंटा बिताया है और इसे आर्कमा में टूल गुई में परिलक्षित करने की कोशिश कर रहा हूं, मैं इसे साझा करना चाहूंगा। यदि आप pyt फ़ाइल के बाहर अपने कोड में परिवर्तन करते हैं और यह देखना चाहेंगे कि यह टूल गुई में परिलक्षित होता है, तो आपको ArcMap / कैटलॉग को पुनरारंभ करना होगा। आप अपने इच्छित टूलबॉक्स पर रीफ़्रेश हिट कर सकते हैं, जो केवल पाईट को पुनः लोड करने के लिए लगता है। यह दूसरे कोड में परिवर्तन नहीं खोजेगा।
टर्बो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.