我正在编写一个python脚本来从另一个项目导入一个设置文件。
这是该项目的结构:
- root
- ...
- folder_1
- setting_folder
- __init__.py
- setting_1.py
- setting_2.py
- setting_3.py在这里,文件内容:
init.py
from .setting_1 import *
from .setting_2 import *setting_1.py
foo = "foo1"setting_2.py
foo = "foo2"
try:
from .setting_3 import *
except ImportError:
passsetting_3.py
foo = "foo3"我需要做的是,从项目外部的脚本中加载setting_2.py并获得foo变量的值(由于相对导入而产生的foo3)。
假设我在目录"C:\Users\bar\Desktop“中运行我的脚本。实现此目标的想法是将setting_2.py复制到项目之外的另一个目录(例如a),在a中创建一个空文件init.py,附加到PYTHONPATH "C:\Users\bar\Desktop“,然后导入该模块。
在这里,代码:
import os
import importlib.util
with open(setting_2_path, "r") as f:
test_file_content = f.read()
setting_tmp_path = r"C:\Users\bar\Desktop\a\setting_2.py"
with open(setting_tmp_path, "w") as f:
f.write(test_file_content)
init_tmp_path = r"C:\Users\bar\Desktop\a\__init__.py"
with open(init_tmp_path, "w") as f:
f.write("")
current_env = os.environ.copy()
current_env.update({'PYTHONPATH': r"C:\Users\bar\Desktop"})
spec_module = importlib.import_module('a.setting_2')
print(getattr(spec_module, "foo"))这是很好的工作,但在生产中,这个脚本将在另一个项目,我不能创建一个文件夹在同一级别的脚本。
我可以创建文件夹,但在另一个目录。
为了模拟这个场景,假设我从C:\Users\bar\Desktop\bar 2运行脚本,文件夹是C:\Users\bar\Desktop\a。
在本例中,我有以下错误:
ImportError: No module named 'a'我怎样才能解决这个问题?
发布于 2021-04-22 08:09:03
import os
import sys
cwd = os.getcwd() # This is current working directory, as in your assumption it is: C:\Users\bar\Desktop\bar2
path_to_settings_files = os.path.join(os.path.dirname(cwd), 'a') # This is where settings are, as in your assumption it is: C:\Users\bar\Desktop\a
sys.path.append(path_to_settings_files) # This line guides interpreter to find settings.py in loading modules
import setting_1
import setting_2
import setting_3
print(setting_1.foo)
print(setting_2.foo)
print(setting_3.foo)https://stackoverflow.com/questions/67208073
复制相似问题