什么是兄弟进口?

时间:2017-05-18 11:24:24

标签: python python-import

2to3 - Automated Python 2 to 3 code translation - Fixers - import请注意:

  

检测同级导入并将其转换为相对导入。

4 个答案:

答案 0 :(得分:2)

同级别导入 终端技术。在您的问题的上下文中,它意味着:

  • 同一目录导入文件(以便导入文件和导入文件是兄弟姐妹相对于文件系统),或

  • 这样的文件导入模块(模块)。

注意:

问题来自Python 2和Python 3导入系统之间的微小差异,但首先让文件系统路径与importfrom ... import语句中使用的包/模块路径进行比较:

+---+--------------------------+-------------------------+
|   |    In the File system    |   In the Python import  |
+---+--------------------------+-------------------------+
| 1 | /doc/excel               |  doc.excel              | <--- absolute
| 2 |   excel (we are in /doc) |   excel (we are in doc) | <--- ???
| 3 | ./excel (we are in /doc) |  .excel (we are in doc) | <--- relative
+---+--------------------------+-------------------------+

实质上的区别在于:

在文件系统中,我们始终将绝对路径识别为以/(或类似的东西)开头的路径,因此案例2和3在上表中含义相同 - 两者都是相对路径。

但是在 Python导入系统中,案例2意味着:在当前模块中搜索excel(即在doc中),但是如果不是发现,将其视为顶级模块。这可能会产生问题。

2to3.py分析这种模糊(案例2)的导入,试图确定哪些是兄弟姐妹(在本答案的顶部提到的含义),并将它们转换为是明确相对的(即进入案例3)

(案例3 总是明确的 - 前导.表示相对路径,即模块doc.excel)。

答案 1 :(得分:1)

"""Fixer for import statements.
If spam is being imported from the local directory, this import:
    from spam import eggs
Becomes:
    from .spam import eggs
And this import:
    import spam
Becomes:
    from . import spam
"""

导入本地模块时会更改,并且在本地

中有__init__.py
-- local path
  -- a.py
  -- b.py
  -- __init__.py


RefactoringTool: Refactored a.py
--- a.py    (original)
+++ a.py    (refactored)
@@ -1,2 +1,2 @@
-import b
-print 'xxx'
+from . import b
+print('xxx')
RefactoringTool: Files that need to be modified:
RefactoringTool: a.py

详细信息请参阅:probably_a_local_import

答案 2 :(得分:0)

它指的是导入同一父目录下的模块。

在此目录结构中:

parent
    module1
        __init__.py
        module1.py
    module2
        __init__.py
        module2.py

例如,兄弟导入会引用从module1导入module2.py

答案 3 :(得分:0)

来自source code

  testCompile'android.arch.persistence.room:testing:1.0.0-alpha1'

所以兄弟代表“在同一级别上”