在计算机程序开发过程中,随着程序代码越来越多,在一个文件里的代码越来越多,越来越不容易维护
为了编写可以维护的代码,我们把很多模块分组,分别放在不同的文件里,这样每个文件里面包含的代码就相对的少
在Python中,每个.py就是一个模块(module)
优点
- 提高了代码的可维护性
- 每个模块都是可重用的
- 避免函数名和变量名冲突
模块分为三类
- 内置模块
- 第三方模块
- 自定义模块
导入模块
#导入xxx模块
import xxx
#从xxx导入xx
from xxx import xx
#起别名x
from xxx import xx as x
#将xxx模块全部导入,调用时不需要xxx.了(不推荐使用)
from xxx import *
安装第三方模块
pip install xxx
卸载第三方模块
pip uninstall xxx
默认会使用python官方服务器下载,速度比较慢,可以改用国内的源
(从豆瓣安装并将该网址信任)
pip install -i http://pypi.douban.com/simple xxx --trusted-host pypi.douban.com
包
当你的模块越来越多,就需要对模块进行划分,根据不同的功能分为多个目录,一个目录管理多个模块文件,这个目录称为包
包里面应该有一个__init__.py文件,用于告诉python解析器这是一个包,
示例
#文件路径
imports
---text
---__init__.py
---text1.py
---proj
---__init__.py
---proj1.py
---模块.py
在模块.py中导入text1.py文件
from text import text1
在text1.py中导入proj.py文件
import sys
print(sys.path). #打印python的环境变量,第一个''是当前目录
sys.path.append('/Users/sunlizhao/PycharmProjects/imports') #将目录路径写入到环境变量中(当前文件有效)
print(sys.path)
现在就可以在text1.py中导入proj.py文件了
from proj import proj1.py
但是这样就把路径给写死,如果项目更换平台就会报错
获取当前文件路径
print(__file__)
#/Users/sunlizhao/PycharmProjects/imports/text/text1.py
但是我们只想获取到imports目录这一层
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
print(BASE_DIR)
#/Users/sunlizhao/PycharmProjects/imports
发现这样就向上了两层目录
然后将目录添加到环境变量
sys.path.append(BASE_DIR)
print(sys.path)
这样在pycharm中成功了,但是在终端中很可能会失败,找了一下原因__file__还不是绝对路径
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from proj import proj1
相对路径(路径关系比较严格,不常用)
相对路径往上翻不能到程序的目录,在这个例子中,就是不能到imports目录
这样就需要重新更改一下目录结构
imports
---tete
---text
---__init__.py
---text1.py
---proj
---__init__.py
---proj1.py
---模块.py
在text1.py中导入proj1.py文件
from ..proj import proj1