首页 文章

什么是Python隐式相对导入

提问于
浏览
11

PEP 8 -- Style Guide for Python Code

显式相对导入是绝对导入的可接受替代方法永远不应使用隐式相对导入,并且已在Python3中删除 .

什么是Python隐式相对导入?

隐式导入是一种算法

从当前包目录中搜索,直到最终包父命中 . - 来自https://www.python.org/dev/peps/pep-0328/#rationale-for-relative-imports

有人可以详细解释一下吗?

在Python3中删除了?

python2 -c 'import csv; print(csv)'
<module 'csv' from '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.pyc'>

$ touch csv.py

$ python2 -c 'import csv; print(csv)'
<module 'csv' from 'csv.pyc'>

# In python3 still search from current package
$ python3 -c 'import csv; print(csv)'
<module 'csv' from '/path_to/csv.py'>

为什么pep-0008建议永远不要使用它?

1 回答

  • 12

    当你说:

    import foo
    

    Python 2将首先在调用者的目录中查找 . Python 3不会这样做,只会在 sys.pathPYTHONPATHsite-packages 等)的常用位置找到 foo .

    这意味着如果您正在编写支持Python 3的软件包,您应该在软件包中说明:

    import mypkg.foo
    

    或使用显式相对导入:

    from . import foo
    

相关问题