我正在尝试从子目录中的文件动态导入函数。
例如:
workspace
--|main.py
----|subfolder1
------|subfolder2
--------|file1.py
--------|file2.py
文件
main.py
将动态运行 file1.py
或 file2.py
中的函数。两个文件中的函数内容不同,但名称相同,在此示例中我将其称为 run
。
我正在尝试这样做,这样我就可以让用户输入他们想要运行的文件并且它将运行。我选择动态导入的主要原因是因为我会将文件添加到每天运行的可用文件列表中,并且我不想拥有或添加到大型 if 语句。
我正在尝试使用
importlib
模块来动态导入它。
# main.py
file = input("Either file1 or file2")
try:
mod = importlib.import_module(f"subfolder1.subfolder2.{file}")
except Exception as error:
print(f"[ERROR] {error}!")
else:
mod.run()
我得到的错误是
[ERROR] No module named 'subfolder1.subfolder2.file1.py'; 'subfolder1.subfolder2.file1' is not a package!
我已经解决了我的问题,事实证明这是我在
importlib.import_module
中输入的内容。
问题的答案应该是将
__init__.py
文件添加到将成为包的目录中。 __init__.py
文件可以为空,但可以包含内容。
有用的链接
感谢@joanis 解决了我的问题,也感谢所有帮助解决原始问题的人。