ฉันมีโครงสร้างไดเรกทอรีคล้ายกับสิ่งต่อไปนี้
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
เมื่อทำงานในnotebook.jpynb
ถ้าฉันพยายามใช้การนำเข้าสัมพัทธ์เพื่อเข้าถึงฟังก์ชันfunction()
ในmodule.py
:
from ..project1.lib.module import function
ฉันได้รับข้อผิดพลาดต่อไปนี้:
SystemError Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function
SystemError: Parent module '' not loaded, cannot perform relative import
มีวิธีใดบ้างที่จะทำให้สิ่งนี้ทำงานโดยใช้การนำเข้าแบบสัมพัทธ์
หมายเหตุเซิร์ฟเวอร์โน้ตบุ๊กถูกสร้างอินสแตนซ์ที่ระดับของmeta_project
ไดเร็กทอรีดังนั้นจึงควรเข้าถึงข้อมูลในไฟล์เหล่านั้น
โปรดทราบว่าอย่างน้อยที่สุดตามที่ตั้งใจไว้เดิมproject1
ไม่ได้คิดว่าเป็นโมดูลดังนั้นจึงไม่มี__init__.py
ไฟล์จึงมีความหมายเพียงแค่เป็นไดเร็กทอรีระบบไฟล์ หากวิธีการแก้ปัญหาต้องการให้ถือว่าเป็นโมดูลและรวม__init__.py
ไฟล์ (แม้แต่ไฟล์เปล่า ๆ ) ก็ใช้ได้ แต่การทำเช่นนั้นไม่เพียงพอที่จะแก้ปัญหา
ฉันแชร์ไดเร็กทอรีนี้ระหว่างเครื่องและการนำเข้าแบบสัมพัทธ์ทำให้ฉันสามารถใช้รหัสเดียวกันได้ทุกที่และฉันมักจะใช้โน้ตบุ๊กในการสร้างต้นแบบอย่างรวดเร็วดังนั้นคำแนะนำที่เกี่ยวข้องกับการแฮ็คด้วยกันพา ธ สัมบูรณ์ไม่น่าจะเป็นประโยชน์
แก้ไข: สิ่งนี้ไม่เหมือนกับการนำเข้าแบบสัมพัทธ์ใน Python 3ซึ่งพูดถึงการนำเข้าแบบสัมพัทธ์ใน Python 3 โดยทั่วไปและโดยเฉพาะอย่างยิ่งการเรียกใช้สคริปต์จากภายในไดเร็กทอรีแพ็คเกจ สิ่งนี้เกี่ยวข้องกับการทำงานภายในสมุดบันทึก jupyter ที่พยายามเรียกใช้ฟังก์ชันในโมดูลภายในเครื่องในไดเร็กทอรีอื่นซึ่งมีทั้งลักษณะทั่วไปและลักษณะเฉพาะที่แตกต่างกัน
lib
ไดเร็กทอรี
__init__
ไฟล์ในไดเร็กทอรีแพ็กเกจของคุณหรือไม่