我看到许多人在他们的项目中使用以下导入方法:
from .module1 import a,b
from ..module2 import *module1和module2是一个.py文件,但不是包的文件夹。import module有什么不同?它是否意味着导入当前和./文件夹中的模块?但是,当我试图在同一个文件夹中导入另一个文件时,它说:
import .other
>>> SyntaxError: Invalid syntax
from .other import *
>>> ValueError: Attempted relative import in non-package我对此很好奇。谢谢~
发布于 2016-02-11 19:44:23
你看到的是相对进口。它们允许您通过指定模块的相对路径来导入模块,而无需对定义模块的包的名称进行硬编码。
它是否意味着导入当前和./文件夹中的模块?
是。
有关更多详细信息,请参阅佩普328。注意,上面写着:
相对导入必须始终使用
from <> import;import <>始终是绝对的。
这就是为什么您在尝试SyntaxError时获得import .foo的原因。
ValueError可能是因为您将导入文件作为脚本运行(它常常使我感到困惑)。您需要将它作为一个包运行(使用-m开关),以使相对导入工作。也就是说,假设foo.py相对导入其他模块,则不能通过
$ python foo.py # non-package error相反,你做了
$ python -m foo参见相关问题:如何用Python进行相对导入。
https://stackoverflow.com/questions/35348165
复制相似问题