CPython import - WinChua/blog GitHub Wiki

资料

  1. PEP 420:
a. 支持了隐式的pkg namespace import.
b. import foo 的搜索顺序:
  b.1 <directory>/foo/__init__.py 如果能够被搜索到的话, foo作为一个regular package被返回
  b.2 <directory>/foo.py 如果能够被搜索到的话, foo作为一个module被返回
  b.3 <directory>/foo 被找到的话, 记录下这个被找到的路径, 继续搜索
  b.4 最后搜索完之后, 如果没有package, module被返回, 同时b.3中存在某个路径被记录, 将会创建一个namespace package, 
c. 这个namespace package将会具有以下的属性: __path__(用于记录子pkg的搜索路径), 不会有__file__

三种module在属性上的区别

path file
package ['/root/test/pkg/foo'] init.py
namespace pkg _NamespacePath(['/root/test/pkg/bar']) None
module Attribute Error filename
  1. Reference
⚠️ **GitHub.com Fallback** ⚠️