【发布时间】:2019-05-05 13:54:49
【问题描述】:
我正在尝试从子文件夹中动态导入基于 python 的 SQL 查询模块,并且该文件夹是通过使用 argparse 模块获得的。
我的项目结构:
main_file.py
Data_Projects/
ITA_data/
__init__.py
sqlfile.py
UK_data/
__init__.py
sqlfile.py
在 main_file.py 中是 argparse 模块,其参数 'dir' 包含指定目录的位置,即
parser.add_argument('--dir', default='Data_Projects/ITA_data/', type=str,
help="set the data directory")
到目前为止,我的理解是模块应该在顶部导入,并且只导入一个我会使用的 sql 查询:
from Data_Project.ITA_data import sqlfile
我知道在 args 定义后我无法设置 import 语句,那么我如何才能在顶部的导入中保持格式正确,然后用之后定义的参数进行追溯更新呢?
非常感谢。
更新
感谢以下答案。我现在尝试分配:
sqlfile = __import__(in_arg.dir + 'sqlfile.py')
但是我收到以下错误:
*** ModuleNotFoundError: 没有名为“Data_Projects/ITA_data/sqlfile”的模块
我尝试过使用类似的东西
os.path.join(Path(__file__).resolve().parents[0], in_arg.dir + 'sqlfile')
如果有帮助,当我尝试时:
__import__('Data_Projects') - works fine
__import__('Data_Projects/ITA_data') - doesn't work - ModuleNotFound
作为验证我没有疯的检查:
os.path.exists('Data_Projects/ITA_Data/sqlfile.py') >>> True
os.path.exists(in_arg.dir + 'sqlfile.py') >>> True
【问题讨论】:
-
没有限制必须在顶部进行导入,您可以在使用的范围(之前)导入模块。