Python 从上级目录导入模块

12

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

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

我的问题是我无法在用户文件夹中的任何文件中导入基本文件,但可以从用户文件夹中进行导入。我知道我必须像下面这样做:

from ..handlers import *    

但是由于某些原因,这并不起作用。我所尝试做的就是将base.py导入到用户目录和其他目录中,在稍后的日期添加。


请问“我无法在用户文件夹中的任何文件中导入基础模块,但可以从用户文件夹中导入”是什么意思?您还能澄清一下“由于某种原因”的含义吗?请参见http://stackoverflow.com/questions/4826955/import-from-different-directories-in-python。这有帮助吗? - darthbith
我有一个主文件,可以使用 ´from handlers.users import *´ 从用户文件中导入,但需要将 base.py 导入到用户文件夹中的文件中。 - bobthemac
主文件在哪里?另外,您似乎没有展示完整的相关目录结构...也许我没有理解您的描述,如果是这样,我很抱歉。能否请您发布一下这不起作用的原因?即错误代码或堆栈跟踪... - darthbith
文件需要作为模块运行,以使相对导入正常工作。您是否这样做了? - M4rtini
谢谢你的帮助,但我已经解决了这个问题。问题出在缺少了两个点,应该是从...handlers import *,而不是从..handlers import *。 - bobthemac
2个回答

11
import sys
sys.path.append('/your/dir/goes/here')
from base import foo

类似这样的东西应该允许您从任何目录导入所需的内容。


1
可能希望将其插入路径的开头而不是结尾,但是没错 +1 - Joran Beasley
这个还是不起作用,仍然出现了“没有找到模块”的错误。我其实也不应该这样做,因为我不确定它是否与正在运行的Google App Engine兼容。 - bobthemac
请注意,您可以使用相对路径(例如 './''../')来配合此方法,除此之外也可以使用绝对路径(例如 '/home/username/code')。 - Zoey Hewll

4
为了启用相对导入,请添加main/__init__.py文件以使main目录成为Python包。 main目录的父目录应该在sys.path中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接