繁体   English   中英

Python 3.5 vs Python 2.7:模块导入子模块

[英]Python 3.5 vs Python 2.7: Modules importing submodules

在过去的几个小时中,我一直在使用Google搜索,在任何地方都找不到等效的问题。 此外,2.7和3.5的文档似乎相同,因此我认为没有记录这种行为。

这是我的目录结构:

project
    -- project.py
    -- api
        -- __init__.py
        -- subapi
            -- __init__.py

project/project.py内容: import api

project/api/__init__.pyimport subapi

如果我从projects文件夹中执行python project.py (使用python 2.7),它将返回而没有错误。 如果我对python 3( python3 project.py )进行相同操作,则崩溃

Traceback (most recent call last):
  File "project.py", line 1, in <module>
    import api
  File "/home/me/Documents/project/api/__init__.py", line 1, in <module>
    import subapi
ImportError: No module named 'subapi'

如果我重写import语句以使用相对于项目目录的路径( import api.subapi ),则它适用于python 2和3。虽然这不是令人满意的解决方案,因为这要求我从子模块中引用父模块。哪种方式打败了模块化的想法。

有谁知道我该怎么做才能恢复python2的行为? 模块搜索算法应优先使用import语句在文件的本地目录中搜索。 顺便说一句,它还应优先考虑上述内置模块中的这些文件。 尝试导入模块“测试”。

-编辑-stackoverflow要求我将我的问题与另一个称为“如何进行相对进口”的问题区分开。 我认为这个问题有所不同,因为我专门询问两个版本之间的差异。 使用相对导入是解决方案,而不是问题。

使用显式相对导入:

from . import subapi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM