Python中的多级嵌套导入

时间:2017-05-03 20:48:03

标签: python import structure

我目前正在从事以下项目,并遇到了一些进口困难。我之前来自Python之前的Ruby背景,所以我怀疑我只是遗漏了一些东西。

-src
--project
---actions
----some .py files
---config
----some .py files
---db
----some .py files
-tests
--some .py files
-run.py

我想做的一些行动是:

  • run.py
  • 导入src / project / config / file.py
  • project中的第二级文件夹之间导入(即actions中的文件从config导入某些内容)
  • 将任何文件导入测试

有人会就如何做到这一点有任何建议吗?

1 个答案:

答案 0 :(得分:0)

因此,引用更深入到目录中的内容非常容易。例如,从run.py开始,您可以使用以下内容:

    from src.project.config.file import foo

也可以轻松访问同一目录中的某些内容,比如你在src / file1.py中尝试访问src / file2.py,这只是:

    from file2 import foo

这也有效。但是,如果您尝试向上导入,请说从file.py到run.py并尝试运行类似这样的内容:

    from ... import run.foo

您将收到以下错误:

    ValueError: attempted relative import beyond top-level package

问题是Python假设您的顶级包是运行文件所在的位置。这就是为什么你可以在同一级别和更深层次上导入所有内容但无法获得任何上述内容的原因。

轻松解决此问题的方法就是将文件的路径附加到sys.path,这样:

    import sys
    sys.append('path/to/run')
    from run import foo

这就是你问题的答案。

根据您的项目设置方式,虽然您似乎想制作一个模块并且需要更多动手,但我建议您阅读documentation它非常好。