我該怎麼辦from some.module import *
其中模塊的名稱是在字符串變量中定義的?從Python模塊動態加載所有名稱
2
A
回答
2
此代碼出口所有符號從os
:
import importlib
# Load the module as `module'
module = importlib.import_module("os")
# Now extract the attributes into the locals() namespace, as `from ..
# import *' would do
if hasattr(module, "__all__"):
# A module can define __all__ to explicitly define which names
# are imported by the `.. import *' statement
attrs = { key: getattr(module, key) for key in module.__all__ }
else:
# Otherwise, the statement imports all names that do not start with
# an underscore
attrs = { key: value for key, value in module.__dict__.items() if
key[0] != "_" }
# Copy the attibutes into the locals() namespace
locals().update(attrs)
參見例如this question瞭解更多關於from ... import *
操作背後邏輯的信息。
現在,雖然這個工程,你應該而不是使用此代碼。從命名模塊導入所有符號已經被認爲是不好的做法,但用戶給定的名稱做到這一點更糟糕。搜索PHP的register_globals
如果您需要提示可能出錯的提示。
+0
這不是用戶給定的名稱,我需要根據環境變量 – 2015-03-03 08:17:29
+0
中的值加載dev,測試或prod設置文件。 ; '「os」'是一個可以是任何東西的字符串。 – 2015-03-03 09:02:59
0
在Python中,內置的導入函數完成了與使用import語句相同的目標,但它是一個實際函數,它將一個字符串作爲參數。
sys = __import__('sys')
變量sys現在是sys模塊,就像你說過import sys一樣。
相關問題
- 1. 動態加載python模塊
- 2. Python:通過名稱加載模塊
- 3. 動態模塊加載在python
- 4. Yii2從名稱動態加載班級
- 5. 動態加載Angular2模塊
- 6. RequireJS - 動態加載模塊
- 7. 動態加載模塊ZF2
- 8. 動態加載模塊? angular2
- 9. GWT動態模塊加載
- 10. 動態加載Perl模塊
- 11. Android動態加載模塊
- 12. RequireJS加載所有模塊
- 13. 使用模塊名稱加載模塊而不是文件名
- 14. ZF2 - 包括(自動加載)類/命名空間,所有模塊
- 15. ZF沒有自動加載模塊和模塊從模塊
- 16. 加載所有模塊recursivly從子文件夾在Python
- 17. 模塊的動態填充名稱
- 18. Ruby:包含動態模塊名稱
- 19. 與現有模塊具有相同名稱的python模塊名稱
- 20. 從python包中獲取模塊名稱
- 21. Python模塊名稱衝突
- 22. Python模塊名稱衝突
- 23. 如何在Python中加載與其他模塊名稱相同的模塊?
- 24. 如何導入Python名稱空間包的所有子模塊?
- 25. 動態模塊Python
- 26. 如何添加到`externals`包含通用名稱的所有模塊的名稱
- 27. Python動態導入 - 如何從變量的模塊名稱中導入*
- 28. 在Django中動態加載和靜態加載模塊
- 29. 加載動態的Require.js模塊
- 30. 加載內容模塊動態與jquery
你在做什麼最有可能是錯誤的...定義運行時模塊級變量。遲早你會遇到這種方法的麻煩。相反,將這些對象存儲到一個數據結構中,例如字典並對其進行處理。 – bgusach 2015-03-03 08:10:27
我這樣做是爲了根據環境變量加載開發,生產和測試設置 – 2015-03-03 08:14:56
這很好,但在這種情況下,您更可能想模擬'import some.module'而不是'from some.module import *'。 – 2015-03-03 08:37:35