首页 > 解决方案 > 从具有重复文件名的子文件夹导入

问题描述

我有以下目录结构:

.
|
|--- __init__.py
|--- main.py
|--- FolderA
|    |
|    |--- __init__.py
|    |--- scriptA.py
|    |--- config.py
|--- FolderB
     |
     |--- __init__.py
     |--- scriptB.py
     |--- config.py

脚本A.py:

import config
print(config.something)

脚本B.py:

import config
print(config.something)

config.py(文件夹A):

something = "A"

config.py(文件夹B):

something = "B"

scriptA.py应该导入config.pyfromFolderA和from scriptB.pyconfig.pyFolderB

现在,main.py我想直接导入两个脚本和两个配置。所有.py文件都应直接在其各自的位置执行,即scriptA应在FolderAmain.py中运行.

主要.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"

由于某种原因,来自 FolderB 的配置未在 scriptB 中使用

我已经阅读了这个资源,它告诉我这在 python3 中是不可能的。但是,是否有合理的解决方法,以便我可以完全导入和使用main.py(例如import FolderA.config as configA)中的所有脚本和配置,确保脚本也可以在其各自的文件夹中执行?

编辑:

我添加了一个可以清楚地显示问题的工作 main.py。

标签: pythonpython-3.x

解决方案


我按照这个答案imp.load_source中的建议解决了这个问题:

主要.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"

推荐阅读