ฉันเป็นผู้ดูแลโมดูล Runpy ของ Python และเป็นหนึ่งในผู้ดูแลระบบการนำเข้าในปัจจุบัน ในขณะที่ระบบการนำเข้าของเรานั้นมีความยืดหยุ่นอย่างน่าประทับใจ แต่ผมขอแนะนำไม่ให้ใช้การขายส่งโดยไม่ต้องปรับแต่งเล็กน้อย - เนื่องจากข้อกังวลเกี่ยวกับความเข้ากันได้ของระบบย้อนหลัง
สิ่งหนึ่งที่เจ็บปวดกับ PEP 302 ใน Python คือระยะเวลาที่เราใช้ในการแปลงระบบการนำเข้าหลักไปใช้ สำหรับส่วนที่ดีขึ้นของทศวรรษใคร ๆ ก็ทำอะไรที่ซับซ้อนด้วย hooks นำเข้าติดดำเนินการสองชิ้น: หนึ่งจัดการ PEP 302 รถตักที่สอดคล้อง (เช่นการนำเข้า zip) และการจัดการที่สองกลไกการนำเข้าระบบไฟล์มาตรฐาน เฉพาะในอนาคตที่จะถึงนี้ 3.3 ที่จัดการ PEP 302 loader จะดูแลจัดการโมดูลที่อิมพอร์ตผ่านกลไกการนำเข้าระบบไฟล์มาตรฐาน พยายามอย่าทำผิดซ้ำ ๆ หากคุณสามารถหลีกเลี่ยงได้
PEP 420 (นำไปใช้กับ Python 3.3) ทำให้การเพิ่มเติมบางอย่างในโปรโตคอลเพื่อให้ผู้นำเข้ามีส่วนร่วมในแพ็คเกจเนมสเปซ นอกจากนี้ยังแก้ไขปัญหาการตั้งชื่อในคำจำกัดความ Finder API (แทนที่ "find_module" ที่มีชื่อไม่ถูกต้องด้วย "find_loader" ที่แม่นยำยิ่งขึ้น) หวังว่าทั้งหมดนี้จะได้รับการบันทึกไว้อย่างชัดเจนในสเป็คภาษาตามเวลาที่ 3.3rc1 หมุนรอบในเวลาสองสามสัปดาห์
ปัญหาที่น่าสังเกตอีกประการหนึ่งก็คือวิธีการจัดทำเอกสารโดยเฉพาะใน PEP 302 นั้นมีกระบวนการทางรัฐทั่วโลกมากเกินไป อย่าตามพวกเราไปตามเส้นทางนั้น - ลองห่อหุ้มสถานะในโมเดลวัตถุที่สอดคล้องกันมากขึ้นดังนั้นจึงง่ายขึ้นเล็กน้อยที่จะเลือกนำเข้าโมดูลอื่น ๆ (โมดูลส่วนขยาย C เป็นสิ่งที่ขาดไม่ได้ในการทำให้การห่อหุ้มมีประสิทธิภาพอย่างสมบูรณ์ มีประโยชน์)
PEP 406 (http://www.python.org/dev/peps/pep-0406/) กล่าวถึงวิวัฒนาการที่เข้ากันได้ย้อนหลังของแนวทางของ Python พร้อมการห่อหุ้มสถานะที่ดีขึ้น หากคุณมีโมเดลสภาวะห่อหุ้มตั้งแต่เริ่มต้นคุณสามารถกำหนด API ของคุณได้ตามความต้องการและหลีกเลี่ยงการให้ผู้นำเข้าและรถตักสามารถเข้าถึงสถานะทั่วโลกได้เลย
ชิ้นส่วนที่ขาดหายไปอีกชิ้นใน PEP 302 คือความสามารถในการขอผู้นำเข้าตัววนซ้ำสำหรับโมดูลที่จัดหาโดยผู้นำเข้านั้น (จำเป็นสำหรับสิ่งต่างๆเช่นยูทิลิตี้ค้างและยูทิลิตี้เอกสารอัตโนมัติที่ดึงเอกสาร) เนื่องจากมันมีประโยชน์อย่างไม่น่าเชื่อคุณอาจจะดีกว่าที่จะทำให้มันเป็นมาตรฐานตั้งแต่เริ่มต้น: http://docs.python.org/dev/library/pkgutil#pkgutil.iter_modules (เราจะยกระดับสิ่งนี้ให้เป็นรูปแบบที่ระบุไว้อย่างเป็นทางการ API ใน Python 3.4)
และความคิดเห็นสุดท้ายของฉันคือคุณควรดูการแบ่งความรับผิดชอบอย่างใกล้ชิดระหว่างระบบการนำเข้าและวัตถุตัวโหลด โดยเฉพาะอย่างยิ่งให้พิจารณาแยก "load_module" API เป็นขั้นตอน "init_module" และ "exec_module" แยกต่างหาก ซึ่งจะช่วยให้คุณลดระดับที่ตัวตักจำเป็นต้องโต้ตอบโดยตรงกับสถานะการนำเข้า
PEP 302 และ importlib เป็นจุดเริ่มต้นที่ดีสำหรับระบบการนำเข้าที่ยืดหยุ่นมากขึ้น แต่มีข้อผิดพลาดอย่างแน่นอนที่เราทำซึ่งควรหลีกเลี่ยง