首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多级相对导入

多级相对导入
EN

Stack Overflow用户
提问于 2012-02-14 20:52:57
回答 2查看 11.5K关注 0票数 18

多级相对导入

我有以下文件夹结构

代码语言:javascript
复制
top\
   __init__.py
   util\
      __init__.py
      utiltest.py
   foo\
      __init__.py
      foo.py
      bar\
         __init__.py
         foobar.py

我想从foobar.py访问模块utiltest.py。我尝试了以下相对导入,但这不起作用:from ...util.utiltest import *

我总是得到ValueError: Attempted relative import beyond toplevel package

如何做这样一个多级的相对导入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-14 21:14:46

您必须从top的父文件夹导入foobar

代码语言:javascript
复制
import top.foo.bar.foobar

这告诉Python top是顶层的包。只有在包中才能进行相对导入。

票数 13
EN

Stack Overflow用户

发布于 2015-09-17 03:48:59

我意识到这是一个古老的问题,但我觉得公认的答案可能遗漏了提问者代码的主要问题。严格地说,这不是错误的,但它给出了一个建议,只是巧合地绕过了真正的问题。

真正的问题是top\foo\bar中的foobar.py文件是作为脚本运行的。当一个(正确!)尝试相对导入,因为Python解释器不理解包结构,所以导入失败。

解决这个问题的最好方法是不通过文件名运行foobar.py,而是使用解释器的-m标志来告诉它运行top.foo.bar.foobar模块。通过这种方式,Python将知道它加载的主模块在包中,并且它将确切地知道相对导入引用的位置。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9277200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档