通过调用另一个脚本将模块导入环境



我正试图将模块导入到我的当前环境中,这些模块在次要脚本中列出。下面是这个问题的一个模型,以及我尝试的解决方案。

模块脚本:

# Import modules (just one for the example)
import pandas as pd
# Set a variable that can be checked
modules_imported =  True
# Confirmation message
print("Setup script finsihed!")
主脚本:

# Import minimum required modules
import importlib

# Run module script
if 'modules_imported' not in globals():
start_up_script = importlib.util.spec_from_file_location(
name="mod_name",
location="/home/solebay/project/module_script.py"
)
my_mod = importlib.util.module_from_spec(start_up_script)
start_up_script.loader.exec_module(my_mod)

然而,这个尝试失败了,如以下检查所示:

# Litmus Test 1
if 'modules_imported' in globals():
setup_status = 'successfully run!'
else:
setup_status = 'failed!'    
print('Modules script: ' + setup_status)
# Litmus test 2
try:
pd.set_option("display.max_rows", None, "display.max_columns", None)
except:
pandas_commands = "failing!"
else:
pandas_commands = "functioning!"   
print("Pandas commands: " + pandas_commands)

如何通过调用包含模块列表的启动脚本将模块加载到当前环境中?

你的尝试不起作用的原因是globals()实际上不是全局的;

但是如果我没理解错的话,你把事情弄得太复杂了。只需在主脚本中使用import *。您可以使用__all__来指示应该导入哪些变量,以防您在module_script.py中有不应该导入到其他模块中的私有变量。

module_script.py

import pandas as pd
__all__ = ["pd"]
print("Setup script finsihed!")

main_script.py

from module_script import *
pd.set_option("display.max_rows", None, "display.max_columns", None)

请注意,Python只会运行一个模块中的代码一次,即使该模块是从不同的地方多次导入的。

最新更新