【问题标题】:How to Import A Upper Level Package in Python 3 [duplicate]如何在 Python 3 中导入上层包 [重复]
【发布时间】:2014-08-19 03:24:15
【问题描述】:

我有这样的文件结构:

/mypkg
    /__init__.py
    /apkg
        /__init__.py

如何在不使用 sys.path 的情况下从 /mypkg/apkg/__init__.py 导入 /mypkg/__init__.py 并在包中。我的意思是:

# I do not want to do this since path is already outside the package.
import sys
sys.path.append('../../')
import mypkg

再次感谢。

【问题讨论】:

  • 您不能导入不在sys.path 上的任何东西。如果模块不在sys.path 上以正常方式(例如,通过安装到 Python 库目录,或通过在当前目录中),您必须自己添加它。
  • 假设我们有一个文件 /mypkg/afile.py。那么这就是我们在 /mypkg/apkg/_init_.py 中会做的事情:from .. import afile。我想学习如何导入 __init__ 文件,就像 afile 一样。
  • 我标记为重复的问题显示了如何做到这一点。但请注意,顶级包(例如,您的 mypkg)仍然必须可以从 sys.path 访问。

标签: python python-3.x package python-import


【解决方案1】:

简短的回答是你不能。您可以从两个位置导入:

  1. 您的模块位于 Python 路径 (sys.path) 中的目录中。
  2. 您当前的工作目录。

要从父目录导入,您需要将该目录添加到您的路径中。

此外,您正在创建某种循环依赖。我强烈建议您重新考虑您的整体结构,因为让模块导入其“父级”并没有真正意义。您需要更高级别目录中的其他文件这一事实表明,“apkg”中的文件可能应该与“mypkg”处于同一级别。

回复您的评论:您没有导入 __init__.py 文件。它们就像模块的目录,因此您可以利用模块中包含的对象和定义。如有必要,他们还可以在导入模块内容时对其进行初始化。 __init__.py 文件中不应有任何您想在另一个脚本中导入的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2019-12-11
    • 2021-04-21
    • 2021-09-20
    相关资源
    最近更新 更多