Python 包与路径相关的一堆坑

Python 模块相关的细节:

  • Python 2/3 区别
  • 绝对路径导入/相对路径导入
  • 模块启动/单文件启动
  • 包/模块
  • __name__ == '__main__'

参考文档:http://www.pythondoc.com/pythontutorial3/modules.html


1
2
python -m foo/bar
python foo/bar.py

以上两种方式会导致sys.path值不一致。作为模块启动时当前目录会被加进 path,否则文件目录加进入 path。造成的影响是:

模块启动 - 可以相对路径导入自己目录的其他模块

文件启动 - 不可以


这指的是导入时搜索的路径不同。

Python 2 - 默认相对路径导入

Python 3 - 默认绝对路径导入

当然对于 Python2 玩家,有喜闻乐见的

1
from __future__ import absolute_import

包 - 含有__init__.py的目录

模块 - .py文件


同一级之中的导入:

1
2
from foo import bar  # PyCharm Python3 报错,命令行单文件启动可以,没弄明白
from .foo import bar # PyCharm 不报错,需要模块启动

有什么坑踩到了再来总结。