ImportError while importing module from another folder
本问题已经有最佳答案,请猛点这里访问。
我有以下文件夹结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | controller/ __init__.py reactive/ __init__.py control.py pos/ __init__.py devices/ __init__.py cash/ __init__.py server/ __init__.py my_server.py dispatcher/ __init__.py dispatcherctrl.py |
我需要在
主文件在
我不明白为什么,因为
在Python 3中
可以使用importlib.machinery模块为导入创建命名空间和绝对路径:
1 2 3 4 5 6 | import importlib.machinery loader = importlib.machinery.SourceFileLoader('control', '/full/path/controller/reactive/control.py') control = loader.load_module('control') control.someFunction(parameters, here) |
这个方法可以用来导入任何文件夹结构中你想要的东西(向后,递归-不重要,我在这里使用绝对路径只是为了确定)。
Python 2感谢塞巴斯蒂安为Python2提供了类似的答案:
1 2 3 4 | import imp control = imp.load_source('module.name', '/path/to/controller/reactive/control.py') control.someFunction(parameters, here) |
跨版本方式
您还可以执行以下操作:
1 2 3 4 5 | import sys sys.path.insert(0, '/full/path/controller') from reactive import control # <-- Requires control to be defined in __init__.py # it is not enough that there is a file called control.py! |
重要!将您的路径插入到EDOCX1的开头(0)可以正常工作,但是如果您的路径包含任何与Python内置函数冲突的内容,那么您将破坏这些内置函数,这可能会导致各种问题。在那里,尽量使用导入机制,并回归到事物的跨版本方式。