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, ไฟล์ไบต์โค้ดที่คอมไพล์แล้ว, หรือรายการ sys.path ที่ถูกต้องซึ่งมีโมดูล __main__ (เช่น ไฟล์ zip ที่มีไฟล์ __main__.py ระดับบนสุด)

ตัวแปร глобอลพิเศษ __name__, __spec__, __file__, __cached__, __loader__ และ __package__ ถูกตั้งค่าในดิกชันนารี globals ก่อนที่โค้ดโมดูลจะถูกรัน

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

ตัวอย่าง

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

# runpy example
def add(x, y):
    return x + y

def main():
    x, y = 10, 20
    print(add(x, y))
    return

if __name__ == '__main__':
    main()

กระบวนการทั่วไปในการรันตัวอย่างข้างต้นคือ:

>> import runpyexample as rp
>>> rp.main()
30
>>>

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

>> import 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 runpyexample
30