从子文件夹导入重复的文件名

时间:2019-08-20 12:28:02

标签: python python-3.x

我具有以下目录结构:

.
|
|--- __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。

2 个答案:

答案 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()的功能