Python 的模块和包
0

转载自微信公众号Python之禅,作者刘志军,原文链接 https://mp.weixin.qq.com/s/qiHmHV9tzVVH-fDvQcOV9g

0、一个模块(module)就是一个.py文件,模块的名字就是该文件的名字(不包含后缀);

1、一个包(package)就是一个文件夹(Python2规定该文件夹必须包含一个 __init__.py ,Python3没有要求),包名就是文件夹名;

2、按 import 进来的对象不同分为4种场景:

import <package>  # 导入一个包
import <module>   # 导入一个模块
from <package> import <module or subpackage or object>  # 从一个包中导入模块/子包/对象
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中,使之能被解释器发现;

>>> import sys, os
>>> import hi # 当前目录没有hi模块,报错找不到模块
Traceback (most recent call last):
ImportError: No module named hi
>>> sys.path.append("/data") # hi模块所在位置: /data/hi.py,将hi所在模块加入sys.path
>>> import hi # 可以正常工作了

5、另外一种加载模块的方法,如果你的模块不在 sys.path 下面,除了第4条建议外,还可以使用 imp 模块中的方法 imp.load_source

import imp
imp.load_source("hi", "C://data/hi.py")
import hi
imp.load_source("h2", "C://data/hi.py") # 可以自己指定模块的名字,相当与 import hi as h2
import h2

6、import <module> 时,模块中所有的代码将被执行(类对象,函数对象将被创建,不会被调用),import <package> 时,__init__.py 文件中的代码也将被执行;

7、导入模块时,可以通过模块的__file__属性查看模块所在磁盘的路径位置;

>>> import requests
>>> requests.__file__
'D:\\Programs\\Anaconda3\\envs\\py_test\\lib\\site-packages\\requests\\__init__.py'

8、永远不要使用 from <module> import * ,有不可预知的风险;

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!