为了账号安全,请及时绑定邮箱和手机立即绑定

Python 包的引入顺序到底是怎样的?

Python 包的引入顺序到底是怎样的?

扬帆大鱼 2019-02-17 09:53:36
文件结构如下: $ tree . . ├── main.py ├── os.py └── platform.py main.py: import platform import os import sys print('Now in main, Start`enter code here` to Exec following') print(os.getcwd()) print(sys.modules['platform'].__file__) print(platform.processor()) os.py: print('Now in os.py module') platform.py: print('Now in platform.py module') 当我运行 python main.py,结果如下: $ python main.py Now in platform.py module Now in main, Start to Exec following /Users/michael/Code/00-Temp/pkg_import /Users/michael/Code/00-Temp/pkg_import/platform.py Traceback (most recent call last): File "main.py", line 9, in <module> print(platform.processor()) AttributeError: module 'platform' has no attribute 'processor' 问题1:os 和 platform 都是内置模块, 当 import os,默认走到了内置模块,但是 import platform, 却获取了同级目录下的 plarform,为何出现这个现象呢? 问题2:同样的脚本,我在 Pycharm 中直接运行 main.py ,却报这个错误: /Users/michael/anaconda3/bin/python /Users/michael/Code/00-Temp/pkg_import/main.py Now in os.py module Fatal Python error: initsite: Failed to import the site module Traceback (most recent call last): File "/Users/michael/anaconda3/lib/python3.7/site.py", line 570, in <module> main() File "/Users/michael/anaconda3/lib/python3.7/site.py", line 547, in main known_paths = removeduppaths() File "/Users/michael/anaconda3/lib/python3.7/site.py", line 126, in removeduppaths dir, dircase = makepath(dir) File "/Users/michael/anaconda3/lib/python3.7/site.py", line 91, in makepath dir = os.path.join(*paths) AttributeError: module 'os' has no attribute 'path' Process finished with exit code 1
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如果是python环境那么,导包会先从同级目录去找你导入的模块。如果找不到,回去python内置的第三方包去查找模块。完整的查找方式为:同级方法<--同级模块<--同级包<--第三方包

查看完整回答
反对 回复 2019-03-01
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

python 运行时会预转载一些module,你用sys.modules print 一下就知道了。如果已经加载就不会再有搜索一说了~

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 1037 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信