我具有以下目录结构:
.
|
|--- __init__.py
|--- main.py
|--- FolderA
| |
| |--- __init__.py
| |--- scriptA.py
| |--- config.py
|--- FolderB
|
|--- __init__.py
|--- scriptB.py
|--- config.py
scriptA.py:
import config
print(config.something)
scriptB.py:
import config
print(config.something)
config.py(文件夹A):
something = "A"
config.py(FolderB):
something = "B"
scriptA.py
应该从config.py
导入FolderA
,并从scriptB.py
导入config.py
FolderB
。
现在,在main.py
中,我想直接导入两个脚本和两个配置。所有.py
文件应直接在其各自位置执行,即scriptA
应在FolderA
中运行,而main.py
应在.
中运行
main.py:
import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), 'FolderA'))
sys.path.append(os.path.join(os.path.dirname(__file__), 'FolderB'))
from FolderA import scriptA #runs scriptA
from FolderB import scriptB #runs scriptB
输出:
"A"
"A" #should be "B"
由于某些原因,scriptB中未使用FolderB的配置
我已经读过this resource,这告诉我在python3中这是不可能直接实现的。但是,有没有合理的解决方法,这样我就可以完全导入并使用main.py
(例如import FolderA.config as configA
)中的所有脚本和配置 并确保脚本也可以在各自的文件夹中执行吗?
编辑:
我添加了一个可以正常显示问题的main.py。
答案 0 :(得分:1)
我按照this answer的建议使用imp.load_source
解决了这个问题:
main.py:
from imp import load_source
config=load_source('config','/home/mtoller/mre/FolderA/config.py')
from FolderA import scriptA
config=load_source('config','/home/mtoller/mre/FolderB/config.py')
from FolderB import scriptB
输出:
"A"
"B"
答案 1 :(得分:0)
我不知道我是否误解了某些内容,但它应该适用于:
import FolderA
import FolderB
print(FolderA.scriptA.config.something)
或者您可以从scriptA.py:foo
FolderA.scriptA.foo()
的功能