1、pip的安装配置
1.1 pip命令的使用
在安装python时,同时还会安装pip软件,它是python的包管理工具,可以用来查找、下载、安装和卸载python的第三方资源包。
1.2 配置pip
可以直接在终端输入pip命令,如果出错可能会有两个原因:
- pip安装成功以后没有正确配置
- 安装python时,没有自动安装pip(很少见)
和运行python命令一样,如果想要运行pip命令同样也需要将pip命令的安装目录添加到环境变量中。
1.3 安装pip
如果在python安装对应的目录中,没有发现pip.exe文件,可能是因为在安装python时未自动安装pip,建议将python卸载,然后再重新安装python时选择Install Now使用默认方式安装python。
2、管理第三方软件
对第三方包的管理主要包含查找、安装和卸载三个部分的操作。
2.1 安装
使用pip install <包名>命令可以安装指定的第三方资源包。
pip install ipython # 安装ipython包
使用install命令下载第三方资源包时,默认是从pythonhosted下载,由于各种原因,再国内下载速度相对来说比较慢,再某些时候甚至会出现连接超时的情况,我们可以使用国内镜像来提高下载速度。
2.1.1 临时修改
如果只是想临时修改某个第三方资源包的下载地址,再第三方包名后面添加-i参数,再指定下载路径即可,格式为pip install <包名> -i <国内镜像路径>
pip install ipython -i https://pypi.douban.com/simple
2.1.2 永久修改
除了临时修改pip的下载源以外,我们还能永久改变pip的默认下载路径
再当前用户目录下创建一个pip的文件夹,然后再文件夹里创建pip.ini文件并输入一下内容:
[global]
index-url=https://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com
2.1.3 常用国内镜像
- 阿里云 Simple Index
- 中国科技大学 Simple Index
- 豆瓣(douban) Simple Index
- 清华大学 Simple Index
- 中国科学技术大学 Simple Index
2.2 卸载
使用pip uninstall <包名> 命令可以用来卸载指定的第三方资源包
pip uninstall ipython # 卸载ipython包
2.3 查找
使用pip list 或者pip freeze命令可以来管理第三方资源包。
pip list 会列出所有的包,包括一些无法uninstall的包;
pip freeze只会列出我们安装的第三方包。
2.4 总结
1.当我们电脑上运行很多个项目,每个项目使用的第三方资源包又不一致时,怎样将代码和它使用到的第三方资源包放在一起呢?
答:虚拟环境
2.怎样将自己代码使用到的第三方资源包告诉给服务器?
1)使用pip freeze > requires.txt 命令,将代码里使用到的第三方资源包以及版本号写入到requirements.tex文件,再部署时,同时将requirements.tex文件上传到服务器
2)服务器再拿到代码以后,首先运行pip install -r requirements.txt 命令,将文件里列出的所有第三方框架先安装到服务器,然后才能运行代码。
2.5 使用pycharm管理第三方包
除了使用pip 命令管理第三方资源以外,我们还能使用pycharm来对第三方包进行管理
3、包的使用
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下。一个模块就是一个py文件,在python里为了对模块分类管理,就需要划分不同的文件夹。多个有联系的模块可以将其放到同一个文件夹下,一般把python里的一个代码文件夹称为一个包。
作用:规范代码,避免模块名重名引用冲突
说明:包简单理解就是”文件夹“,只不过在该文件夹下必须存在一个名称为“__init__.py”的文件
3.1 导入包的方式
现有以下包 newmsg,包里由两个模块,分别是sendmsg.py、recvmsg.py文件。在包的上级文件夹里,有一个test.py文件,目标是在test.py文件里引入newmsg的两个模块。
目录结构如下图:
sendmsg.py文件里的内容
def send_msg():
print('------sendmsg方法被调用了-------')
recvmsg.py文件里的内容
def recv_msg():
print('-----recvmsg方法被调用了--------')
可以使用以下几种方式来导入模块,使用模块里的方法。
1.直接使用包名.模块模块名导入指定的模块
2.使用from xxx import xxx 方式导入指定模块
3.使用__init__.py文件,导入包里的指定模块。
可以在newmsg里创建__init__.py文件,在该文件里导入指定的内容
在__init__.py文件里编写代码:
from.sendmsg import send_msg # 导入指定的模块 . 代表的是当前文件夹
test.py文件里的代码
import newmsg # 导入时,只需要输入包名即可。在包名的__init__.py文件里,导入了指定模块
newmsg.sendmsg.sendm_msg() # 可以直接调用对应的方法
# newmsg.recvmsg.recv_msg() 不可以使用 recvmsg 模块,因为 __init__.py文件里没有导入这个模块
4.使用__init__.py文件,结合__all__属性,导入包里的所有模块。
在newmsg包里的__init__.py文件里编写代码:
__all__ = ["sendmsg","recvmsg"] # 指定导入的内容
test.py 文件代码:
from newmsg import * # 将newmsg里的__init__.py文件里,__all__属性对应的所有模块都导入
sendmsg.send_msg()
recvmsg.recv_msg()
5.总结
- 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py文件,那么这个文件夹就称之为包
- 有效避免模块名称冲突问题,让应用组织结构更清晰
3.2 __init__.py文件有什么用
__init__.py控制着包的导入行为。
__init__.py为空仅仅是把这个包导入,不会导入包中的模块。可以在__init__.py文件中编写内容。
newmsg/__init__.py 文件:
print('hello world')
别的模块在引入这个包的时候,会自动调用这段代码
3.3 __all__
在__init__.py文件中,定义一个__all__变量,它控制着from包名import*时导入的模块。
newnsg/__init__.py文件:
__all__ = ['sendmsg','recvmsg']