【问题标题】:How to import using a top level path in Python?如何在 Python 中使用顶级路径导入?
【发布时间】:2011-05-20 15:00:21
【问题描述】:

我正在开发一个 python 框架,并希望基于顶级包(项目名称)进行导入。用户将通过复制整个框架并在其中编写自己的模块来使用该框架。

我目前的结构是这样的:

myapp/
  config.py
  docs/
  framework/
    main.py
    utils.py
  file.py
  lib/
    some_module.py
  unit_tests/
    test_utils.py

我希望能够通过以下方式在 lib 和 unit_tests 中的 python 文件中使用以下导入:

from myapp.framework import utils

有没有简单的方法来做到这一点?我试过做 sys.path.append() hacks,但它们并没有真正起作用。如果有一种真正的 Pythonic 方式来实现这一点,我不介意加倍努力让它发挥作用。

编辑:好吧,我再次尝试了 sys.path.append(),它确实有效,但它确实是一个不优雅的解决方案,我真的很想听听是否有其他方法。

【问题讨论】:

  • 为什么sys.path.append() 不起作用?
  • @ire_and_curses - 我不确定为什么 sys.path.append() 无法正常工作,因为我无法实现我想要的导入。但是,根据我的研究,似乎不建议添加到路径中。

标签: python package


【解决方案1】:

简而言之:你不能有两个同名的模块,一个在另一个里面。你有myapp 文件夹和myapp.py 文件

这是因为导入模块的顺序。

  1. 在当前目录内
  2. 当前包
  3. 全局包文件夹

因此,如果您尝试在 config.py 中输入 import myapp.lib.some_module,解释器将首先看到您在同一文件夹中有 myapp.py 并尝试从该文件中导入 lib.some_module,但该文件不存在.

可能是试图从该模块外部导入myapp.myapp.lib.some_module

所以,最好的办法是重命名myapp.py 文件

【讨论】:

  • 抱歉,myapp.py 文件应该是一个占位符文件,以显示还有其他文件。它实际上并不存在于框架中。我会编辑它的问题。
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2011-11-13
  • 2021-09-28
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多