尝试使用另一个脚本导入模块
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
模块的文档中有更多详细信息。
我正在尝试 运行 一个基本的 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
模块的文档中有更多详细信息。