簡體   English   中英

從變量導入模塊

[英]importing module from variable

我有不同的配置文件,它們基本上是定義變量的python文件,我想將它們導入到我的主程序中。

通常,我將擁有一個“ config_file1.py”並執行以下操作:

import config_file1 as params

# and then I can access the different parameters as
params.var1
params.var2

現在,我希望能夠選擇要使用的config_file,因此我想在調用程序時傳遞一個參數,以告知要使用的配置文件。 就像是:

config_filename = sys.argv[1]
import config_filename as params

但是,這會查找名為“ config_filename”的文件。

我想導入由config_filename值引用的文件

編輯:

基本上,我的程序將運行一組實驗,而這些實驗需要一組參數才能運行。

例如:

*** config1.py ****
num_iterations = 100
initial_value1 = 10
initial_value2 = 20 

因此,我可以運行我的程序,將這些變量加載到內存中。

但是,另一個配置文件(config2.py)可能具有另一組參數,因此我希望能夠通過加載所需的配置文件來選擇要運行的實驗。

如果您確實要執行此操作,則可以使用importlib模塊:

import importlib
params = importlib.import_module(sys.argv[1])

然后您可以像這樣使用var

params.var1

這是針對您的詳細信息而不是問題。

如果要從文件加載變量,例如num_iterations = 100initial_value1 = 10initial_value2 = 20 ,那么我真的建議使用某種配置,而不是濫用導入全局變量的方法。

Json是最簡單的方法,您可以在其中加載文件,然后直接得到一個字典:

>>> import json
>>> params = json.loads(config_file1)
{'num_iterations': 100, 'initial_value1': 10, 'initial_value2': 20}

另外,您可以使用ConfigParser,它看起來更好,但是我發現它很容易損壞。

除了使用import語句,還可以使用__import__函數,如下所示:

params = __import__('module_name')

定義:

importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)

參考: https : //docs.python.org/3/library/importlib.html#importlib。 進口

您可以這樣:

config_filename = sys.argv[1]
params = __import__(config_filename)

我不建議使用這種冒險的方法。 您放棄了sys.argv處的所有控件,並且如果模塊中不存在任何named屬性,腳本可能會失敗。

相反,我建議明確控制傳入的受支持模塊是什么:

config_filename = sys.argv[1].lower()

if config_filename == 'os':
    import os as params
elif config_filename == 'shutil':
    import shutil as params
else:   # unhandled modules
    raise ImportError("Unknown module")

暫無
暫無

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

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