[英]importlib.import_module ignoring re-exports made in __init__.py
(最初是在r/learnpython上問的,但我想我也會在這里問。)
由於在處理 django 時出現此問題,因此我將在該上下文中進行解釋。
因此,我有一個 django 項目文件夾,以及一些位於該項目文件夾中的內部 django 應用程序,如下所示:
project_module
├ apps
│ ├ app_module1
│ │ ├ models.py
│ │ └ ...
│ ├ app_module2
│ └ ...
├ settings.py
└ ...
現在 app_modules 可以用作project_module.apps.app_module1
等等,但是由於不會有任何與project_module
中的應用程序名稱沖突的東西,我想刪除.apps
部分,所以我可以將它們稱為project_module.app_module1
等,始終如一。
所以,我到處創建__init__.py
,並將其放入project_module/__init__.py
:
from .apps import app_module1
這種工作,因為我可以import project_module.app_module1
並且它似乎工作。
但是, Django 在內部到處使用importlib.import_module
,在這些情況下,我遇到ModuleNotFoundError: No module named 'project_module.app_module1'
。 在這些情況下,我可以再次使用.apps
,但這會破壞一致性。
稍后進行一些實驗,我確信import_module
忽略來自__init__.py
的重新導出; 但是為什么會發生這種情況,在這種情況下我有辦法解決這個問題嗎?
所以,我在任何地方都創建了init .py,並將其放入 project_module/ init .py
如果您真的決定從導入中刪除app
,請考慮將 project_module/apps 添加到 PYTHONPATH 或sys.path
中。 這也是這個用例中的一個技巧,但更可預測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.