ใช้ตัวแปรจากสคริปต์ Python หนึ่งสคริปต์ในสคริปต์ Python อื่นหรือไม่


9

ฉันต้องการตั้งค่าไฟล์ python เดียวที่มีตัวแปรที่มีที่ตั้งของแหล่งข้อมูลทั้งหมดของฉัน จากนั้นสคริปต์อื่นของฉันทั้งหมดนี้จะถูกใช้งานจากนั้นเมื่อแหล่งข้อมูลเปลี่ยนแปลงฉันต้องแก้ไขไฟล์เดียว

Data_sources.py ของฉันจะมีลักษณะเช่นนี้:

BC_BEC = "Database Connections\\BC.sde\\FOREST_BC.BC_Eco\\BC.BC_BEC"
BC_TFL = "Database Connections\\Forest_BC.sde\\BC.BC_Admin\\BC.TFL_Boundary"

และอื่น ๆ ...

ฉันจะทำให้สคริปต์อื่น ๆ ทั้งหมดโหลดหรือเข้าถึงตัวแปรเหล่านี้ใน Data_sources.py ได้อย่างไร


คำถามเช่นนี้ซึ่งมีความบริสุทธิ์มากกว่างูใหญ่เกี่ยวกับโมดูลหลามหรือเว็บไซต์ของแพคเกจสำหรับ GIS ปกติควรจะวิจัย / ถามที่กองมากเกิน
PolyGeo

คำตอบ:


10

คุณสามารถสร้างโมดูล Python ที่ติดตั้งซึ่งสามารถนำเข้าได้จากสคริปต์ Python ทุกตัวที่คุณเรียกใช้โดยใช้Distutilsเพื่อทำแพ็คเกจ

จาก Python doc:

หากสิ่งที่คุณต้องทำคือแจกจ่ายโมดูลที่ชื่อว่า foo ซึ่งมีอยู่ในไฟล์ foo.py สคริปต์การตั้งค่าของคุณสามารถทำได้ง่ายเช่นนี้:

from distutils.core import setup
setup(name='foo',
      version='1.0',
      py_modules=['foo'],
      )

จากนั้นคุณสามารถติดตั้งผ่าน

python.exe setup.py install

จากนั้นคุณสามารถนำเข้า foo จากสคริปต์ Python ใดก็ได้หรือคุณสามารถใช้

python.exe setup.py bdist_wininst

ในการสร้าง windows installer สำหรับโมดูลเพื่อให้คุณสามารถแจกจ่ายไปยังคอมพิวเตอร์เครื่องอื่น


มีบทที่ดีในหนังสือ 'Byte of Python' ที่แสดงตัวอย่างการสร้างโดยใช้โมดูลการนำเข้าอัง
jonatr

ฉันชอบคำแนะนำนี้ในการสร้างโมดูล แต่ฉันไม่ค่อยมีความรู้ คำสั่ง "python.exe setup.py ติดตั้ง" จะใช้ตัวชี้เพื่อ foo.py หรือจะใช้สิ่งที่อยู่ใน foo.py หรือไม่ หากภายหลังฉันเปลี่ยน foo.py โมดูลจะยังคงเป็นปัจจุบันหรือไม่ ขอบคุณ
ข้อผิดพลาดของผู้ใช้

ฉันจะมองหาหนังสือเล่มนั้นด้วย ขอบคุณสำหรับความช่วยเหลือ Jason และ jonatr
ข้อผิดพลาดของผู้ใช้

การแก้ไขคำศัพท์: คำที่แม่นยำยิ่งกว่าคือ "แพ็คเกจ" - เป็นประโยชน์สำหรับการค้นหาเอกสารและเพื่อให้ชัดเจนว่าแพ็คเกจและโมดูลเป็นสองสิ่งที่แตกต่างกันในโลกหลาม นอกจากนี้คำแนะนำ / คำใบ้: หากคุณทำsetup.py develop(แทนinstall) การแก้ไขแพคเกจจะถูกหยิบขึ้นมาทันทีที่มีการบันทึกโดยไม่จำเป็นต้องติดตั้งใหม่ (อาจเป็นสิ่งที่เหมาะสมสำหรับ data_sources.py ของผู้ถามดั้งเดิม)
Dan S.

3
ผู้ใช้ไม่ใช่แค่ถามวิธีการนำเข้าหรือไม่ ตอบคำถามข้างล่างนี้
sgillies

12

ในสคริปต์ใด ๆ ในไดเรกทอรีเดียวกับ Data_sources.py ให้ใส่

from Data_sources import BC_BEC, BC_TFL

ที่ด้านบน. สิ่งนี้ใช้งานได้เพราะไดเรกทอรีทำงานนั้นอยู่ที่ส่วนหัวของเส้นทางของงูหลามเว้นแต่คุณจะแก้ไขมัน

>>> import sys
>>> sys.path[0] == ''
True

ดูเพิ่มเติมที่: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

หากคุณต้องการแบ่งปันข้อมูลให้กว้างขวางยิ่งขึ้นคุณสามารถจัดเก็บข้อมูลได้ตามที่คนอื่นแนะนำ


8

สร้างไฟล์ config ข้อความและอ่านมันกับงูหลามของConfigParser

ตัวอย่างที่ดีกว่าเอกสารเล็กน้อยอย่างเป็นทางการที่http://effbot.org/librarybook/configparser.htm


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