【问题标题】:Python packages: relative importsPython 包:相对导入
【发布时间】:2012-04-20 23:41:58
【问题描述】:

我正在开发一个 Python 应用程序,该应用程序由一个核心和多个使用该核心的独立模块组成。我在设置包的相对导入时遇到了困难。

app
  |- __init__.py
  |- core
        |- __init__.py
        |- corefile.py

  |- module1
        |- __init__.py
        |- main.py

__init__.py 文件为空。我正在运行 Python 2.7.1。

main.py
from .core import *

运行python main.py 会产生ValueError: Attempted relative import in non-package

类似问题:Ultimate answer to relative python importsHow to do relative imports in Python?Relative imports in Python

感谢您的帮助。

【问题讨论】:

    标签: python python-module relative-import


    【解决方案1】:

    简而言之,您只能从本身已导入的包中使用相对导入。

    例如,如果您有:

    $ cat run.py
    from app.module1 import main
    main.main()
    $ python run.py
    

    然后您可以在app/module1/main.py 中使用相对导入(尽管它必须是from ..core import foo,因为core/main.py 高一级)。

    【讨论】:

    • 取得了一些进展,但现在我收到了ValueError: Attempted relative import beyond toplevel package。打印__name__ 产生module.main 而不是app.module.main。为什么它看不到它上面的目录作为包的一部分?
    • 您是如何导入的?你是从app 里面的东西导入它为module.main 吗?
    • 我设法提出了一个稍微俗气的解决方案,其中涉及尝试不同的路径。我还按照您的建议从顶层调用module.main,所以我会继续关闭它。
    【解决方案2】:
    import sys
    abs_filepath = '/home/n/Documents/IMPORTANT/deep_learning/drori_2018/    final_proj/Ryans_branch/StackGAN/'
    # insert your absolute filepath above as abs_filepath = '/path/to/targ/dir'
    sys.path.append(abs_filepath)
    

    如果以这种方式执行import 有问题,请更正

    其他答案:

    另请参阅here 以获得有关正在发生的事情的全面答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 2016-12-03
      • 1970-01-01
      • 2014-03-09
      • 2013-09-16
      • 2019-08-03
      • 2022-06-15
      相关资源
      最近更新 更多