簡體   English   中英

如何使用Python的__import__函數“從foo導入*”

[英]How do I do 'from foo import *' using Python's __import__ function

我想更換settings.py以作為目錄實施的模塊在我的Django的系統settings包含__init__.py 這將嘗試導入以服務器命名的模塊,從而允許按服務器設置。

如果在導入模塊之前不知道模塊的名稱,則不能使用import關鍵字,而必須使用__import__函數。 但這不會將模塊的內容添加到settings模塊。 我需要等價from MACHINE_NAME import * 或者,我需要一種遍歷vars(m) (其中m是已加載的模塊)並將它們添加到當前名稱空間的方法。 但是我不知道如何引用當前名稱空間以進行分配。 換句話說,我不能使用setattr(x, ..)或修改x.__dict__ ,因為我不知道該對x使用什么。

除了使用exec之外,我想不出其他任何嘗試。 對我來說,這似乎有些微弱。 我是否缺少Pythonic內省的某個方面,可以讓我在仍處於當前范圍內的情況下進行操作?

對於基於lang設置的類似情況,我在messages.py模塊中導入了不同的消息,這類似於

# set values in current namespace
for name in vars(messages):
    v = getattr(messages, name)
    globals()[name] = v

順便說一句,為什么要為settings.py創建一個包? 您想做什么都可以直接在settings.py中完成?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM