python的模块和包
模块
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块。
模块分为三种:
- 内置标准模块(又称标准库)执行help('modules')查看所有python自带模块列表
- 第三方开源模块,可通过pip install 模块名 联网安装
- 自定义模块
使用import调用
import module
from module import xx
from module.xx.xx import xx as rename
from module.xx.xx import *
python文件单独执行
当文件被单独执行时,__name__ 等于'__main__'
def fun():
...
if
__name__
=
=
'__main__'
:
...
这里写执行内容,不会被import到其他程序中执行,只在执行此python文件时才执行
模块查找路径
import sys,os
print(sys.path) #返回一个列表
python解释器会按照列表顺序去依次到每个目录下去匹配你要导入的模块名,只要在一个目录下匹配到了该模块名,就立刻导入,不再继续往后找。
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__的是打印当前被执行的模块.py文件的相对路径,os.path.abspath
是绝对路径,os.path.dirname
是取到上一级
sys.path.append(BASE_DIR) # 添加环境变量,把路径添加到sys.path中
开源模块安装、使用
1.官网页面上点download,下载模块,解压并进入目录,执行以下命令完成安装
编译源码 python setup.py build
安装源码 python setup.py install
2.直接通过pip安装
pip3 install paramiko #paramiko 是模块名
软件一般会被自动安装到你的python的这个子目录里site-packages
pip命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多
sudo pip install -i http://pypi.douban.com/simple/ module
_name --trusted-host pypi.douban.com # modole_name
是模块名
包(Package)
当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相关的放一个文件夹
└── my_proj ├── crm #代码目录 │ ├── admin.py │ ├── apps.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── my_proj #配置文件目录 ├── settings.py ├── urls.py └── wsgi.py
像上面这样,一个文件夹管理多个模块文件,这个文件夹就被称为包
- 文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
- 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
绝对导入&相对导入
在linux里可以通过cd ..回到上一层目录 ,cd ../.. 往上回2层,这个..就是指相对路径,在python里,导入也可以使用..
绝对导入:以glance作为起始 from glance.cmd import manage
相对导入:用.或者..的方式做为起始(只能在一个包中使用,不能用于不同目录内) from ..cmd import manage
软件开发一般有一下这些包