目录中有__init__.py
,我可以通过
from subdirectory.file import *
但我希望导入该子目录中的每个文件;所以我试过
from subdirectory.* import *
哪个不起作用。有什么建议吗?
答案 0 :(得分:5)
尝试了一些不同的解决方案(如果您在相邻目录中有一个名为“文件夹”的文件夹)后找到了此方法:
for entry in os.scandir('folder'):
if entry.is_file():
string = f'from folder import {entry.name}'[:-3]
exec (string)
答案 1 :(得分:3)
如果您有以下结构:
$ tree subdirectory/
subdirectory/
├── file1.py
├── file2.py
└── file3.py
并且您希望程序自动获取位于此subdirectory
中的每个模块并以某种方式处理它,您可以按如下方式实现它:
import glob
# Get file paths of all modules.
modules = glob.glob('subdirectory/*.py')
# Dynamically load those modules here.
有关如何动态加载模块,请参阅this question。
在subdirectory/__init__.py
中,您可以通过以下方式导入所有本地模块:
from . import file1
from . import file2
# And so on.
您可以通过
导入本地模块的内容from .file1 import *
# And so on.
然后您可以通过
导入这些模块(或内容)from subdirectory import *
使用__all__
中的属性__init__.py
,您可以控制在from ... import *
语句中准确导入的内容。因此,如果您不希望导入file2.py
,例如,您可以执行以下操作:
__all__ = ['file1', 'file3', ...]
您可以通过
访问这些模块import subdirectory
from subdirectory import *
for name in subdirectory.__all__:
module = locals()[name]
答案 2 :(得分:1)
您的__init__.py
文件应如下所示:
from file1 import *
from file2 import *
然后你可以这样做:
from subdirectory import *