1 第三方模块
第三方模块安装的路径:python36Libsite-packages
把pip.exe 所在的路径添加到环境变量中。
安装:
-
pip包管理工具: pip install xlrd
-
源码安装:
-
下载源码包:压缩文件。
-
解压文件
-
打开cmd窗口,并进入此目录:cd C:Python36Libsite-packages
-
执行:python36 setup.py build
-
执行:python36 setup.py install
-
pip install 要安装的模块名称 # pip install xlrd (在命令执行窗口去下载安装)
-
网慢
-
python36 -m pip install --upgrade pip(pip安装路径问题报错执行前面这句话)
安装完成后需要更新版本的
-
安装完成后,如果导入不成功。
-
重启pycharm。
-
安装错了。
-
2 自定义模块
-
自定义模块安装的路径:当前执行python的路径
-
xxxx.py
def f1(): print('f1') def f2(): print('f2')
-
x1.py
# 调用自定义模块中的功能 import xxxx xxxx.f1() xxxx.f2()
-
运行
python x1.py
-
定义模块
定义模块时可以把一个py文件或一个文件夹(包)当作一个模块,以方便于以后其他py文件的调用
-
对于包的定义:
py2:文件夹中必须有_ _ init _ _.py
py3:不需要_ _ init _ _.py
推荐:以后写代码时,都要加上此文件。
什么是包?
1.文件夹 存储了多个py文件的文件夹 2.如果导入的是一个包,这个包里的模块默认是不能用的 3.导入一个包相当于执行 __init__.py文件中的内容
3 模块的调用
导入模块,加载此模块中所有的值到内容中。
3.1 示例一
# lizhongwei.py 模块文件 #!/usr/bin/env python # -*- coding:utf-8 -*- def show(): print('我司里种种') def func(): pass print(456)
# 导入模块,加载此模块中所有的值到内存。 import lizhongwei print(123) # 调用模块中的函数 lizhongwei.func()
# 导入模块 # 方法一 from lizhongwei import func,show # 1 该方法有弊端:容易重名 from lizhongwei import func from lizhongwei import show # 2 1和2执行结果一样 # 方法二 from lizhongwei import * # 导入lizhongwei中所有的函数 func() # 导入模块 # 方法三 from lizhongwei import func as f # 给lizhongwei中的func重新命名为f def func(): print(123) f() # 函数中的func与模块中的func重名了,需要给模块中的func重新命名后再执行。
导入模块:
-
import 模块 模块.函数()
-
from 模块 import 函数 函数() 【as起别名 / *】
-
from 模块 import 函数 as 别名 别名()
3.2 示例二
lizohng - jd.py - pdd.py - tb.py 包.py
import lizhong.jd lizhong.jd.f1()
from lizhong import jd jd.f1()
from lizhong.jd import f1 f1()
3.3 总结(普通导入)
-
模块和要执行的py文件在同一目录 且 需要 模块中的很多功能时,推荐用: import 模块
-
其他推荐:from 模块 import 模块 模块.函数()
-
其他推荐:from 模块.模块 import 函数 函数()
导入:
-
绝对导入:
-
import 模块
-
from 模块.模块 import 模块
-
from 模块.模块.模块 import 函数
-
-
相对导入【不推荐】
from . import xxx from .. import xxx
调用模块内部元素
-
函数()
-
模块.函数()
3.4 多次导入
多次导入不会再重新加载
# jd.py ===> print(123) import jd # 第一次加载:会加载一遍jd中所有的内容。 import jd # 由于已经加载过,就不再重新加载。 print(456) # 123 /n 456
import importlib import jd importlib.reload(jd) # 重新加载一遍jd中所有的内容 print(456)
通过模块导入的特性也可以实现单例模式:
# jd.py class Foo(object): pass obj = Foo()
# app.py import jd # 加载jd.py,加载最后会实例化一个Foo对象并赋值给obj print(jd.obj)