Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การค้นหาและเรียกใช้โมดูล Python (runpy)


อ็อพชัน –m ของอ็อพชันบรรทัดคำสั่งจะค้นหาโมดูลที่กำหนดและดำเนินการเป็นโมดูล __main__ กลไกนี้ได้รับการสนับสนุนภายในโดยโมดูล runpy จากโมดูลมาตรฐานของ Python ที่อนุญาตให้ระบุตำแหน่งสคริปต์โดยใช้เนมสเปซของโมดูล Python แทนที่จะเป็นระบบไฟล์

โมดูลนี้กำหนดสองฟังก์ชัน

run_module()

ฟังก์ชันนี้รันโค้ดของโมดูลที่ระบุและส่งคืนพจนานุกรมโมดูล globals ที่เป็นผลลัพธ์

อาร์กิวเมนต์ mod_name ควรเป็นชื่อโมดูลแบบสัมบูรณ์ หากชื่อโมดูลอ้างอิงถึงแพ็คเกจแทนที่จะเป็นโมดูลปกติ แพ็คเกจนั้นจะถูกนำเข้าและโมดูลย่อย __main__ ภายในแพ็คเกจนั้นจะถูกดำเนินการและจะส่งคืนพจนานุกรม globals ของโมดูลที่เป็นผลลัพธ์

ตัวแปรส่วนกลางพิเศษ __name__, __spec__, __file__, __cached__, __loader__ และ __package__ ถูกตั้งค่าในพจนานุกรม globals ก่อนดำเนินการโค้ดโมดูล

__name__ ถูกตั้งค่าเป็น mod_name + '.__main__' หากโมดูลที่มีชื่อเป็นแพ็คเกจ มิฉะนั้นเป็นอาร์กิวเมนต์ mod_name

__file__, __cached__, __loader__ และ __package__ ได้รับการตั้งค่าตามปกติตามข้อมูลจำเพาะของโมดูล

run_path()

ฟังก์ชันนี้รันโค้ดในไฟล์ตามเส้นทางที่กำหนดและส่งคืนพจนานุกรมโมดูล globals ที่เป็นผลลัพธ์ พาธที่ให้มาอาจอ้างถึงไฟล์ต้นทางของ Python ไฟล์ bytecode ที่คอมไพล์แล้ว หรือรายการ sys.path ที่ถูกต้องซึ่งมีโมดูล __main__ (เช่น zipfile ที่มีไฟล์ __main__.py ระดับบนสุด)

ตัวแปรส่วนกลางพิเศษ __name__, __spec__, __file__, __cached__, __loader__ และ __package__ ถูกตั้งค่าในพจนานุกรม globals ก่อนดำเนินการโค้ดโมดูล

__name__ ถูกตั้งค่าเป็น run_name หากอาร์กิวเมนต์ที่เป็นตัวเลือกนี้ไม่ใช่ None และเปลี่ยนเป็น '' ไม่เช่นนั้น

ตัวอย่าง

บันทึกสคริปต์ต่อไปนี้เป็น runpyeample.py

#runpy exampledef add(x,y):return x+ydef main():x,y =10,20 พิมพ์ (เพิ่ม (x,y)) returnif __name__=='__main__':main() 

กระบวนการปกติของการดำเนินการตามตัวอย่างข้างต้นมีดังนี้

>>> นำเข้า runpyexample เป็น rp>
>> rp.main()30>>>

อย่างไรก็ตาม ตอนนี้เราใช้โมดูล runpy เพื่อดำเนินการโดยไม่ต้องนำเข้าจริงๆ

>>> นำเข้า runpy>>> runpy.run_module('runpyexample', run_name='__main__')30

คุณยังสามารถใช้ฟังก์ชัน run_path() ได้

>>> runpy.run_path('runpyexample.py', run_name='__main__')30

ดังที่กล่าวไว้ก่อนหน้านี้ runpy รองรับสวิตช์ –m ของบรรทัดคำสั่ง Python

E:\python37>python -m runpyexample30