Python 从包外脚本导入
Python import from script outside package
Python 无法导入包,但在包内可以正常工作。下面是一个功能齐全的示例。在虚拟环境中,我使用的是 3.6 所有回复都非常感谢!
parsers/
__init__.py
element.py
parser1.py
parser2.py
parserresolver.py
outsidepkg.py
init.py为空
element.py:
def router():
pass
parser1.py:
from element import *
def parse(data):
return data
parser2.py:
from element import *
def parse(data):
return data
parserresolver.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')
outsidepkg.py:
import parsers.parserresolver
def getapi(data):
parsers.parserresolver.resolve(data)
if __name__ == "__main__":
print(getapi('in parse api main'))
所以当我直接调用 parserresolver.py 时效果很好,没有导入错误并按预期打印出 "something"。
但是当我调用 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 无法导入包,但在包内可以正常工作。下面是一个功能齐全的示例。在虚拟环境中,我使用的是 3.6 所有回复都非常感谢!
parsers/
__init__.py
element.py
parser1.py
parser2.py
parserresolver.py
outsidepkg.py
init.py为空
element.py:
def router():
pass
parser1.py:
from element import *
def parse(data):
return data
parser2.py:
from element import *
def parse(data):
return data
parserresolver.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')
outsidepkg.py:
import parsers.parserresolver
def getapi(data):
parsers.parserresolver.resolve(data)
if __name__ == "__main__":
print(getapi('in parse api main'))
所以当我直接调用 parserresolver.py 时效果很好,没有导入错误并按预期打印出 "something"。
但是当我调用 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
由于您的 运行 代码在文件夹之外,因此使用 .
获取目录,因为文件不在包之外。