模块
在Python中,一个.py文件就称之为一个模块(Module)。
包含__init__.py
文件的模块的目录称为包(Package)。__init__.py
本身就是一个模块,直接调用包名时即调用该模块。
以模块形式调用该包或其下的模块时(如python -m 包名.模块名
和import 包名
),会先调用__init__.py
中的逻辑
通过import 包名.模块名
或from 包名 import 模块名
的方式可以调用包下的模块。
类似的,可以有多级目录,组成多级层次的包结构。
注意模块名不要和系统模块名冲突(可以在Python交互环境执行import 模块名
,若成功则说明系统存在此模块)
导入优先级:
- 同名包下的
__init__.py
模块 - 自定义的该模块 (即导入
模块名.py
文件) - 系统自带的该模块
import 和 from import
- 通过
import 包名.模块名
或from 包名 import 模块名
导入包下的指定模块。- 通过
import 包名.模块名
导入后,使用模块下的内容需要包名.模块名.内容名
- 通过
from 包名 import 模块名
导入后,使用模块下的内容只需直接内容名
- 通过
- 通过
from 包名 import *
导入整个包,且此时包中的内容可以作为全局变量被调用。 - 通过
from 包名.模块名 import *
导入整个模块,且此时模块中的内容可以作为全局变量被调用。
import tkinter
root = tkinter.Tk()
from tkinter import *
root = Tk()
- 对于直接导入的模块可以通过模块名直接访问,对于自身模块只能通过
sys.modules[__name__]
访问
import sys
import tkinter as tk
print(tk.__dict__)
print(sys.modules[__name__].__dict__)
被导入的非内置模块会在工程根目录下的__pycache__
目录下生成和py文件同名的以.cpython-**.pyc
结尾的字节码文件(cpython是C语言实现的python解释器,**为其版本号),之后若再次执行该脚本,它先检查【本地是否有上述字节码文件】和【该字节码文件的修改时间是否在其源文件之后】,是就直接执行,否则重新加载
python -m 和 sys.path
sys.path
是一个包含Python环境变量的list,当通过import
引入模块时就会在sys.path
目录中查找相应的模块
- 当直接通过
python 文件路径
执行时,会把该文件路径加入sys.path
- 通过
python -m 模块名
执行时,会把当前执行指令的路径加入sys.path
- 通过
sys.path.append()
手动向sys.path中添加路径
__name__
当在命令行直接运行一个python模块时,Python解释器把一个特殊变量__name__
置为__main__
,如果通过模块引入并运行,则置为该模块名
__file__
该代码所在的文件路径(可能是绝对路径也可能是相对路径,由文件/模块被引入的方式决定)
模块文档
模块内的第一段str
视为模块的文档,可以通过模块名·__doc__
访问
同理,函数体内的第一段str
也可以通过函数名.__doc__
访问
pip安装第三方模块
pip
是python的包管理工具。(pip对应python2,pip3对应python3)
pip install 包名
- 换国内镜像源
pip install 包名 -i https://mirrors.aliyun.com/pypi/simple/
或修改配置文件
- 在windows文件管理器中,输入
%APPDATA%
- 会定位到一个新的目录下,在该目录下新建
pip
文件夹,然后到pip
文件夹里面去新建个pip.ini
文件 - 在新建的
pip.ini
文件中输入以下内容
[global]
timeout = 6000
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
- 查看安装情况
pip show 包名
requirements.txt
requirements.txt
是一个依赖库的列表,可以通过pip freeze > requirements.txt
将本地所有包导出到该文档,也可以使用pipreqs仅仅将当前项目的依赖库导出到requirements.txt
pip install pipreqs
# 在当前目录生成requirements.txt,(--force表示如已存在则覆盖)
pipreqs . --encoding=utf8 --force
通过pip install -r requirements.txt
可以安装requirements.txt
中依赖的库。
Anaconda
Anaconda集成了python及其常用包,并做了版本管理。Anaconda安装的第三方模块会安装在Anaconda自己的路径下,不影响系统已安装的Python目录。
- 在Anaconda的命令行窗口中,python指向自己自带的Python。
常用指令
在cmd中需要输入conda前缀,在conda中可以省略
- 查看版本
conda --version
- 升级版本
conda update conda
- 帮助信息
conda --help
- 创建一个名为MyPython3的子环境,其中拥有python3.7.4、numpy、Django2.2包。(如果不指定python版本则默认安装当前anaconda具有的版本)
conda create -n MyPython3 python=3.7.4 numpy Django=2.2
proceed([y]/n)? y
- 切换到子环境
conda activate 环境名
- 退出子环境
conda deactivate
- 查看子环境列表
conda env list
- 删除环境
conda remove --name <env_name> --all
- 复制环境
conda create --name <new_env_name> --clone <copied_env_name>
- 精确查找包
conda search --full-name <package_full_name>
- 模糊查找包
conda search <text>
- 获取当前环境已安装包
conda list
- 在当前环境安装包(也可以用pip)
conda install <package_name>
- 从当前环境卸载包
conda remove <package_name>
- 更新所有包
conda update --all
- 更新指定包
<package_name>
常用的第三方库
可以在 awesome-python 这个网站上按照分类去寻找
- Pillow 图像处理
- requests 接口处理
- chardet 检测编码类型
- psutil 获取系统信息
网友评论