แนวทางสำหรับการจัดระเบียบกล่องเครื่องมือหลาม (.pyt) ใน ArcGIS


17

สำหรับหนึ่งในภารกิจของฉันฉันต้องสร้างกล่องเครื่องมือที่มีสามเครื่องมือ (สคริปต์หลาม)

แทนที่จะเป็น tbx ธรรมดาฉันตัดสินใจเขียนเป็น Python Toolbox (pyt)

ทุกอย่างชัดเจนยกเว้นวิธี "ดี" ในการจัดระเบียบรหัส

เนื่องจากฉันมีสามเครื่องมือจึงไม่ดีที่จะเก็บไว้ในไฟล์เดียว (pyt) ดังนั้นฉันตัดสินใจเก็บเครื่องมือแต่ละไฟล์ในไฟล์. py แยกต่างหาก

นี่คือปัญหา: วิธีที่ดีในการจัดระเบียบไฟล์หลายไฟล์ด้วย PYT สำหรับการแจกจ่ายหรือการปรับใช้บน ArcGIS สำหรับเซิร์ฟเวอร์คืออะไร ฉันควรเก็บไว้ในระดับเดียวกันกับไฟล์ PYT หรือฉันควรวางไว้ในไดเรกทอรีย่อยบางอัน (เช่น "เครื่องมือ")?

คุณสามารถแนะนำแนวทาง Esri หรือตัวอย่าง "กล่องเครื่องมือ PYT ขนาดใหญ่" ใด ๆ ได้หรือไม่

ฉันไม่พบสิ่งใดในหัวข้อนี้ ในเวอร์ชั่น 10.0 มีชื่อว่าโครงสร้างโฟลเดอร์ ToolShareที่ฉันใช้

นี่เป็นคำถามของรูปแบบการเข้ารหัสเพิ่มเติม เพราะความคิดในการสร้างไฟล์ PYT หนึ่งไฟล์ที่มีโค้ดตั้งแต่ 500-1,000 บรรทัดขึ้นไปนั้นดูไม่ดีสำหรับฉันและฉันเชื่อว่ามันไม่ใช่วิธี "pythonic"


1
"แนวคิดในการสร้างไฟล์ PYT หนึ่งไฟล์ที่มีโค้ดตั้งแต่ 500-1,000 บรรทัดขึ้นไปนั้นดูไม่ดีสำหรับฉัน" คุณไม่ได้อยู่คนเดียวอเล็กซ์ วันนี้ฉันแจ้งทันทีว่า .pyt เป็นสิ่งประดิษฐ์ของจิตใจที่ป่วย และฉันจะไม่เสียใจ
Remigijus Pankevičius

คำตอบ:


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]

ฉันพบว่ามันใช้งานได้ดีใน ArcGIS Desktop แต่เมื่อทำการเผยแพร่บริการประมวลผลทางภูมิศาสตร์ไปยังอินสแตนซ์ของ ArcGIS Server มันจะเสียสคริปต์และแพ็คเกจทั้งหมดนอกเหนือจากไฟล์. pyt อาจเป็นไปได้ที่จะวางสคริปต์ลงในการปรับใช้ด้วยตนเอง แต่เพิ่มความซับซ้อน
ริ้น

3
@Gnat ใช่ความคิดของลุคก็เป็นประสบการณ์ของฉันเช่นกัน บริการเผยแพร่ของ ESRI ไม่รู้จักfrom x import yการนำเข้าลักษณะใด ๆ (นั่นคือไร้สาระโดยสิ้นเชิงโดยวิธี.) แต่ผมเชื่อว่าคุณสามารถปล่อยให้คุณความหมายเพียงอย่างเดียวและการใช้งานself.tools import toolpackage.script_a.Tool1 as Tool1
jpmc26

1
นามแฝงควรสั้นและมีตัวอักษรเท่านั้นเช่น self.alias = "mtt"
Curtis Price

2
เนื่องจากฉันเพิ่งใช้เวลาหนึ่งชั่วโมงในการเปลี่ยนแปลงโค้ดเครื่องมือของฉันและพยายามที่จะดูเหมือนมันสะท้อนให้เห็นใน gui เครื่องมือใน Arcmap ฉันต้องการแชร์สิ่งนี้ หากคุณทำการเปลี่ยนแปลงรหัสของคุณนอกไฟล์ pyt และต้องการที่จะเห็นมันสะท้อนให้เห็นใน gui เครื่องมือที่คุณต้องรีสตาร์ท ArcMap / แคตตาล็อก คุณสามารถกดรีเฟรชในกล่องเครื่องมือได้ตามที่คุณต้องการซึ่งดูเหมือนว่าจะโหลดปิตตัวเองเท่านั้น มันจะไม่พบการเปลี่ยนแปลงรหัสอื่น ๆ
TurboGus

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.