Python 无法导入包,但可以在包内正常工作。下面是一个功能齐全的示例。在虚拟环境中,我使用的是 3.6 非常感谢所有回复!
parsers/
__init__.py
element.py
parser1.py
parser2.py
parserresolver.py
outsidepkg.py
init.py 为空
元素.py:
def router():
pass
解析器1.py:
from element import *
def parse(data):
return data
解析器2.py:
from element import *
def parse(data):
return data
解析器解析器.py:
import sys
from parser1 import *
from parser2 import *
def resolve(data):
parseddata = None
parsers = ['parser1', 'parser2']
funcname = 'parse'
for parser in parsers:
module = sys.modules[parser]
if hasattr(module, funcname):
func = getattr(module, funcname)
parseddata = func(data)
print(parseddata)
return parseddata
if __name__ == "__main__":
resolve('something')
外部pkg.py:
import parsers.parserresolver
def getapi(data):
parsers.parserresolver.resolve(data)
if __name__ == "__main__":
print(getapi('in parse api main'))
因此,当我直接调用 parserresolver.py 时,它工作得很好,没有导入错误并按预期打印出“某些内容”。
但是当我调用 Outsidepkg.py 时,我收到此错误:
Traceback (most recent call last):
File "C:\code\TestImport\TestImport\outsidepkg.py", line 1, in <module>
import parsers.parserresolver
File "C:\code\TestImport\TestImport\parsers\parserresolver.py", line 2, in <module>
from parser1 import *
ModuleNotFoundError: No module named 'parser1'
Press any key to continue . . .
最佳答案
您需要更改以下内容的导入:
from file import whatever
致:
from .file import whatever
由于运行它的代码位于文件夹外部,因此请使用 .
获取目录,因为该文件不在包外部。
关于Python从包外脚本导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56014933/