尝试使用另一个脚本导入模块

Trying to import modules using another script

我正在尝试 运行 一个基本的 setup.py 脚本,它将在另一个更复杂的脚本的开头为我导入模块。

例如,setup.py 脚本如下所示:

import requests 
import pandas as pd

modules_imported = True 

然后我的主脚本像这样开始:

import os
setup_path = ("/home/solebay/My\ Project\ Name/setup.py")

if 'modules_imported' not in globals():
    os.system('python3 ' + setup_path)
    print("modules imported!")

但是,模块没有导入,运行反复使用它会导致“模块已导入!”要打印的消息(显然证明该陈述是不真实的)。

脚本不是真正的 运行ning 还是模块不是永久安装的?

print("Success!")添加到startup.py表明主脚本没有return打印命令的内容。在什么意义上正在执行脚本(如果有)?


故障排除 为了响应 BartoszKP, and with further assistance from Maurice Meyer in 我提出的建议,我尝试了以下操作:

import importlib
if 'modules_imported' not in globals():

    start_up_script = importlib.util.spec_from_file_location(
        name="mod_name",
        location="/home/solebay/My Project Name/setup.py"
        )    
    my_mod = importlib.util.module_from_spec(start_up_script)
    start_up_script.loader.exec_module(my_mod)

尽管 type(start_up_script) 包含看起来正确的内容:_frozen_importlib.ModuleSpec,但根据我的 startup.py 脚本,modules_imported 从未设置为 True

此外,以下测试失败:

test_data = {'C1':  ['AA', 'AB'], 'C2': ['BA', 'BB']}
test_df = pd.DataFrame (data, columns = ['C1','C2'])

NameError: name 'pd' is not defined
#Clearly the modules aren't loading into my env.

当您 运行 os.system 使用 python3 时,您只是在启动一个新的、完全独立的 Python 解释器,它有自己的宇宙。这不会影响您当前的执行环境。

看来你想要的是这样的:

spec = importlib.util.spec_from_file_location('setup', '/home/solebay/My\ Project\ Name/')
module = importlib.util.module_from_spec(spec)

importlib 模块的文档中有更多详细信息。