【问题标题】:Import modules to environment by calling another script通过调用另一个脚本将模块导入环境
【发布时间】:2021-08-23 08:34:01
【问题描述】:

我正在尝试将辅助脚本中列出的模块导入当前环境。除了我尝试的解决方案之外,以下是该问题的模型。

模块脚本:

# 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)

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

【问题讨论】:

    标签: python python-module


    【解决方案1】:

    您的尝试不起作用的原因是 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 只会在一个模块中运行一次代码,即使该模块是从不同位置多次导入的。

    【讨论】:

    • 我把这个问题搞得太复杂了。如果module_script 在子文件夹中,是否有一种简单的方法可以做到这一点,例如from setup/module_script import *。我尝试使用路径,但对设置目录不满意。
    • 是的,这是可能的。我建议您阅读 Python 模块的基础知识。
    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2021-03-18
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多