Python-如何在Python中进行相对导入?

发布于 2021-02-02 23:24:07

想象一下这个目录结构:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

我正在编码mod1,我需要从中导入一些东西mod2。我该怎么办?

我尝试过,from ..sub2 import mod2但是得到了“未打包的相对导入尝试”。

我四处搜寻,但只发现"sys.path manipulation"骇客。有没有一种干净的方法?

关注者
0
被浏览
488
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    每个人似乎都想告诉你应该做什么,而不仅仅是回答问题。

    问题是你通过将mod1.py作为参数传递给解释器而将模块作为__main__运行。

    从PEP 328:

    相对导入使用模块的__name__属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何软件包信息(例如,将其设置为'__main__'),则相对导入的解析就好像该模块是顶级模块一样,无论该模块实际位于文件系统上的哪个位置。

    在Python 2.6中,他们添加了相对于主模块引用模块的功能。 PEP 366描述了更改。

    更新:根据Nick Coghlan的建议,推荐的替代方法是使用-m开关运行软件包中的模块。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看