我試圖從多個位置導入模塊,但無法使其工作,因爲Python3中的相對導入已被禁用。我想這樣做,以便用戶可以複製package_1並在終端上運行它(使用主類);而另一個類被導入到作爲web應用程序前端的scriptb.py中。從多個位置導入模塊時python3相對導入
-- projectfolder
-- projectfolder/
-- __init__.py
--- package_1/
------ __init__.py
------ subpackage_a/
------ subpackage_a/core/module1.py
------ subpackage_a/__init__.py
------ subpackage_a/core/__init__.py
------ run.py
--- package_2/
----- __init__.py
-- -- scriptb.py
在此間舉行的 「package_1/run.py」 進口: 從subpackage_a.core.module1進口類名
這裏是 「package_2/scriptb」 進口: package_1.run進口類名
然而,當我運行scriptb.py我得到run.py 導入錯誤以下錯誤:沒有模塊名爲「package_1.core」
Traceback:
File "/directory/package_1/run.py", line 7, in <module>
from subpackage_a.common.exceptions import Classname
ImportError: No module named 'subpackage_a.common'
有沒有更好的方法來處理這個問題,然後捕獲ImportError異常並在所有「package_a」模塊中定義兩個導入位置?
或不是做這個這意味着導入每個模塊兩次
if __name__ == '__main__':
from package_1 import classname
else:
from .package_1 import classname
感謝
編輯好:
以供將來參考我不得不這樣做的子包導入其他模塊核心文件夾
try:
from package_1.core.module1 import classname:
except ImportError:
from ..core.module2 import classname
以下僅作品主:
if __name__ == '__main__':
from package_1.core.module1 import classname:
except ImportError:
from .package_1.core.module2 import classname
感謝您的回覆。所有的軟件包都有__init__.py文件。我將編輯帖子,因爲我忘了輸入它們。 – budge
該死的,我不能使用「if __name__ =='__main__':」在子包內,因爲它們不被稱爲主程序,所以我仍然這樣做有同樣的問題。假設我必須捕獲ImportError異常.. – budge