Python Tips

1.Python import 报错:"ModuleNotFoundError: No module named xxxx.yyyy"

  • 如果是从 site-pacakges里import ,请确认你已经安装了这个库,或者安装了正确的版本。
  • 如果是导入你Python工程中的某些代码,请把对应的路径加入到 sys.path中:sys.path.insert(0, 'your_path')。
  • 如果是导入你自己代码目录下的namespace package,请确认其名称没有与内置库或者第三方库中的库名称重复。

2. Python中 import的包路径查找顺序:

在 python3.3以前,如果一个目录及其子文件想成为一个package,那么这个目录下面必须要有 __init__.py文件;   但在 python3.3之后,一个目录下可以不含 __init__.py文件,此时这个目录称为 namespace package。  于是,在python3.3以后,有两种package: 常规的package(含有__init__.py文件)和 namespace package。

当import xxx的时候, Python解释器会先查找是否是 内置(built-in)库; 如果不是内置库,则继续按照以下先后顺序查找:

1 如果按照sys.path的路径搜寻到一个常规的package,那么Python导入这个package,本次搜寻返回;

2 如果按照sys.path的路径搜寻到一个module文件,那么导入这个文件,本次搜寻返回;

3 如果按照sys.path的路径搜寻到一个目录,并且不包含__init__.py文件,那么就将这个目录记录下来(即namespace package),同时继续按照sys.path中下一个路径开始搜寻

4 如果经过1,2,3步骤都没有搜寻到指定的目录,那么,继续按照sys.path中的一个路径开始搜寻

当遍历完成所有的sys.path中的路径,同时也没有发现常规的package和module文件,那么,就按照namespace package的__path__属性包含的路径,再进行一次搜寻,如果找到,就导入,否则,导入失败。

换句话说,namespace package中__path__属性包含的路径,起到了类似sys.path的作用。

在内置库,常规package和第三方库都找不到此package的时候,最后再查找 namespace package。

参考:Python中的namespace package - chaoguo1234 - 博客园Python中的namespace packagehttps://www.cnblogs.com/chaoguo1234/p/9350396.html

注意:

1. sys.path是动态的,一般是由: 当前文件路径、环境变量PYTHONPATH中的路径、Python安装路径以及第三方库路径等组成。可以在代码中sys.path.insert(0, 'your_pacakge_path')来添加搜寻路径,但仅对当前文件有效。

2.无论是常规package,还是namespace package,如果想要搜寻到,都必须把起对应的路径添加到 sys.path中去,方法:设置PYTHONPATH或者代码中sys.path.insert

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值