关于Python包和模块的知识清单

发表于:2018-10-16 11:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Abhishek Prakash    来源:Linux中国

#
Python
分享:
  有同学问题关于模块与包的问题,特给新人总结的关于Python包与模块的知识清单。
  0、一个模块(module)就是一个py文件,模块的名字就是该文件的名字(不包含后缀)
  1、一个 包(package)就是一个文件夹,(Python2规定该文件夹必须包含一个 __init__.py,Python3没有要求),包名就是文件夹名。
  2、按 import 进来的对象不同分为4种场景:
  1. import <package>  # 导入一个包
  2. import <module>   # 导入一个模块
  3. from <package> import <module or subpackage or object>  # 从一个包中导入模块/子包/对象
  4. from <module> import <object>  # 从模块中导入对象
  3、解释器会按照sys.path列表的顺序来查找被引入的包或模块名字。
  >>> import sys
  >>> import pprint
  >>> pprint.pprint(sys.path)
  ['',
  'C:\\Python\\Python35-32\\python35.zip',
  'C:\\Python\\Python35-32\\DLLs',
  'C:\\Python\\Python35-32\\lib',
  'C:\\Python\\Python35-32',
  'C:\\Python\\Python35-32\\lib\\site-packages']

  优先加载当前工作目录下的模块,如果你的项目中使用了与内建模块中同名的包或模块名,就会遇到没有xx属性之类的报错提示,新手特喜欢干这种事。
  4、你可以操作 sys.path,使得其他路径文件加入到Path中,使之能被解释器发现。
  # test.py
  import sys, os
  # 当前目录没有hi模块,报错找不到模块
  import hi
  Traceback (most recent call last):
  ImportError: No module named hi
  # hi模块所在位置: /data/hi.py
  # 将hi所在模块加入sys.path
  sys.path.append("/data")
  # 可以正常工作了
  5、另外一种加载模块的方法:如果你的模块不在 sys.path,除了第5条方法在外,还可以使用 imp 模块中的方法 imp.load_source
  import imp
  imp.load_source("hi", "C://data/hi.py")
  import hi
  # 可以自己指定模块的名字,相当与 import hi as h2
  imp.load_source("h2", "C://data/hi.py")
  import h2
  6、import module 时,模块中所有的代码将被执行(类对象,函数对象将被创建,不会被调用),import package 时, init .py 文件中的代码也将被执行。 7、模块的 __file__ 属性
  导入模块时,可以通过模块的 __file__ 属性查看模块所在磁盘的路径位置
  >>> import requests
  >>> requests.__file__
  'D:\\Programs\\Anaconda3\\envs\\py_test\\lib\\site-packages\\requests\\__init__.py'
  8、永远不要使用 from import * ,有不可预知的风险

   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号