【问题标题】:chained imports from subdirectory in pythonpython中子目录的链式导入
【发布时间】:2014-08-17 06:33:15
【问题描述】:

我正在使用别人的项目来为我的项目添加一些功能,并且我想导入一个 python 脚本。问题在于他们的目录的导入结构:我已将他们的项目目录放在我的主项目下的一个子文件夹中(需要留在那里,这样我就可以将他们的项目排除在我的版本控制之外)它看起来像这样:

myproject/
  myscript.py
  theirproject/
    __init__.py
    baz.py
    secondlayer/
      __init__.py
      all.py
      foo.py
      bar.py

all.py 只是一个导入语句的列表,它们从第二层目录导入附加脚本,如下所示:

from secondlayer.foo import *
from secondlayer.bar import * #etc

我想导入:

from theirproject.secondlayer.all import *

但是当 python 抱怨“没有名为 secondlayer.foo 的模块”时失败 我还尝试了以下方法:

from theirproject.secondlayer import all

当我将我的脚本放在 theirproject/ 中并在没有“theirproject”前缀的情况下导入所有内容时,我可以让它工作,但我真的不能这样。我可以通过像这样单独导入 foo、bar 等来进一步完成导入过程:

from theirproject.secondlayer import foo
from theirproject.secondlayer import bar #etc

但随后这些脚本无法从与第二层相同级别的其他脚本(如 baz.py)导入更多内容,所以我卡住了。

在 python 2.7.6 中执行此操作的正确方法是什么?

【问题讨论】:

    标签: python import subdirectory


    【解决方案1】:

    如果你改变了

    from secondlayer.foo import *
    from secondlayer.bar import *
    

    向用户这样的相对导入

    from .foo import *
    from .bar import *
    

    或者像这样

    from foo import *
    from bar import *
    

    它有效。

    另外,您可以在第二层的__init__.py 中进行这些导入,以便从myscript.py 导入

    from theirproject.secondlayer.all import *
    

    【讨论】:

      【解决方案2】:

      查看您是否具有从您的目录及其对应的子目录导入包的必要权限。

      作为参考,您可能希望看到这个及其相应的链接问题:

      Python Imports do not work

      【讨论】:

        【解决方案3】:

        我最终通过将 theirproject/ 添加到我的 PYTHONPATH 来解决我的问题。我赞成 junnytony 的回答——它帮助我指出了正确的方向,所以谢谢!

        【讨论】:

          猜你喜欢
          • 2013-11-10
          • 2015-07-23
          • 1970-01-01
          • 2017-03-18
          • 1970-01-01
          • 1970-01-01
          • 2021-01-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多