【问题标题】:Python Imports From The Directory Above从上面的目录导入 Python
【发布时间】:2014-01-28 15:00:38
【问题描述】:

我的 python 应用程序有一个目录结构,在主文件夹中我有一个名为 handlers 的文件夹,在该文件中我有一个 base.py ,所有处理程序都应该从 .我还有一个名为 users 的文件夹,其中包含与用户相关的所有处理程序。

\main
      \handlers
      base.py
      __init__.py
      \users
                __init__.py
                authenticated.py
                logout.py   

我的问题是我无法在用户文件夹中的任何文件中导入基础,但可以从用户文件夹中导入。我知道我必须做类似下面的事情

from ..handlers import *    

但由于某种原因,这不起作用我要做的只是将 base.py 导入用户目录和我稍后添加的其他目录中的文件。

【问题讨论】:

  • 您能否澄清一下“我无法在用户文件夹中的任何文件中导入基础但可以从用户文件夹中导入”是什么意思?您能否澄清一下“出于某种原因”是什么意思?请参阅stackoverflow.com/questions/4826955/… 有帮助吗?
  • 我有一个主文件,我可以使用“from handlers.users import *”从用户文件中导入它,但需要将 base.py 导入用户文件夹中的文件中。
  • 主文件在哪里?看来您还没有向我们展示整个相关的目录结构...可能我不明白您的描述,如果是这样,我很抱歉。你能请张贴这不起作用的原因吗? IE。错误代码或堆栈跟踪...
  • 这些文件需要作为模块运行才能使相对导入工作。你在做这个吗?
  • 感谢您的帮助,但我现在已经解决了问题,它归结为 ..handlers import * 中缺少点应该来自 ...handlers import *

标签: python python-2.7 import directory


【解决方案1】:
import sys
sys.path.append('/your/dir/goes/here')
from base import foo

类似的东西应该允许你从你选择的任何目录中导入东西。

【讨论】:

  • 可能希望将其插入路径的开头而不是结尾,但是是的 +1
  • 这不起作用仍然得到一个 no module named 错误。我也不应该这样做,因为我不确定它是否与运行它的谷歌应用引擎兼容。
  • 注意,除了绝对路径(例如'/home/username/code')之外,您还可以使用此方法使用相对路径(例如'./''../'
【解决方案2】:

要启用相对导入,请添加 main/__init__.py 以将 main 目录添加到 Python 包中。 main 的父目录应该在sys.path 中。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 2013-11-09
    • 2016-12-27
    • 2012-07-08
    • 2020-03-21
    • 1970-01-01
    • 2015-07-23
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多