2to3 - Automated Python 2 to 3 code translation - Fixers - import请注意:
检测同级导入并将其转换为相对导入。
答案 0 :(得分:2)
同级别导入是 终端技术。在您的问题的上下文中,它意味着:
从同一目录导入文件(以便导入文件和导入文件是兄弟姐妹相对于文件系统),或
从这样的文件导入模块(模块)。
注意:的
问题来自Python 2和Python 3导入系统之间的微小差异,但首先让文件系统路径与import
或from ... 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)