使用python中的模块(import)
1.包(package) & 模块(modules)
python中的模块
->1 系统内建标准模块
安装好python解释器环境后,可以直接使用的(import sys,os....)
->2 如果要参与开发,就要加入官方标准组织
pip install pygame 安装一个第三方模块
python中的包和模块:首先是按照代码功能进行整理整合,将相似功能的代码/大量代码整理到一起,方便统一管理
模块(module):python中每个python文件就是一个模块,(模块名称就是文件名称),每个python文件中,封装类似功能的变量,函数,类型等等,可以被其他的python模块通过import关键字引入重复使用
包(package)(文件夹):包含多个python文件/模块的文件夹,并且文件夹中有一个名称为 init.py 的特殊声明文件,那么这个文件夹就是一个包(模块包),可以将大量功能相关的python模块包含起来统一管理,同样也可以被其他模块通过import关键字引入重复使用封装的模块和代码
模块的定义:就是直接在文件夹中创建一个.py文件,模块的名称就是文件的名称
包的定义:01:在文件中直接创建一个文件名为init.py文件,这个文件夹就成为一个包
02:直接在文件右键可以建立一个包,然后会在下面自动出现一个文件名为init.py的文件模块,其余再在这个包下创建的文件都是一个模块
模块和包的复用
import 和 from . import
包和模块的引用,通常有两个关键语法
01->import 包/模块
02->from 包/模块 import 具体对象
pycharm中执行python文件,把每一个文件当做一个代码块执行
在cmd命令行,把每一行当做一个代码块执行
(1)import方式
基本语法:
引入方式:import 模块
可以使用模块中的数据包括
模块.变量
模块.函数
模块.类型
不可以直接用import 引用变量
import引入的包和模块会自动从当前文件夹中,系统环境变量PYTHONPATH中,以及系统的sys.path路径中查询是否存在该名称的包/模块
(2)from xx import 方式
基本语法:
from . import xxx ->从当前模块路径下,引入xxx模块(相对路径)
from .. import xxx ->从当前模块的父级路径下,引入xxx模块(相对路径)
from pkg import module ->从pkg包中引入一个模块module(绝对路径)
from pkg.module import vars,fund,clazz 从指定的模块中直接引入(绝对路径)
注意:from xx import 语法方式,主要是针对出现了包结构的python代码而特定的代码引入方式,首先要非常明确代码的组织结构才能正确使用from import 语法进行代码的引入和复用
上述的四种方式,前两种是使用相对路径的引入操作方式
,后两种是使用绝对路径的引入操作方式
from import 相对引入
首先,相对引入本身是相对当前正在操作的文件路径
同一级路径符号:.
上一级路径使用符号:..
一旦使用相对路径,就要明确所谓相对路径~是依赖他们所属的父级文件夹确定的,就类似生活中的兄弟姐妹的称谓一样,是相对他们的父亲来说的
注意:包和模块的相对引入,一定要切记,引入的路径相对当前文件,执行的路径相对于引入的最外层文件夹,这样才能正确的使用相对引入操作执行我们的代码块
from import 绝对引入
绝对引入操作方式比较直接,从最外层的包的源头直接开始操作
如 from pygame import K_A
这种操作方式在第三方模块的操作中是司空见惯的,但是在独立的项目开发中使用较少
ex: 相对引入操作
from . import utils
绝对引入操作
from demo02 import utils
python -m demo02.main
注意:(1)独立的一个模块中的变量:全局变量,局部变量:能被其他模块引入使用的只有当前模块中的全局变量,其他模块相对于当前模块中全局变量的操作和普通变量一致
(2)模块一旦被其他模块引入,就会自动执行模块中的所有代码
(3)模块中的测试代码可以包含在 if name == "main"语句块中,这样不会在其他模块引入是执行这些测试代码
包(package)
python解释器在执行处理代码时,会默认将包含在python文件的文件夹处理成默认包,默认包只具备文件路径关联的功能,无其他功能
python中的标准包:是在文件夹中包含声明文件init.py的文件夹,主要包含了一个名称为init.py的模块文件,该文件就是一个python模块包
在一个python的包中,可以创建多个模块,同一由python包进行路径管理和导入方式的管理
ex:users/
init.py 包声明模块
moduels.py 数据类型定义模型->User<class>
manager.py 数据模型管理模块 ->UserManager<class>
menus.py 界面处理模块 ->show_index(function)
main.py 程序主模块
menus.py 中代码如下
coding:utf-8
def show_index():
print("系统主菜单")
main.py 中代码如下:
coding:utf-8
引入包中指定的模块
from users import menus
使用模块中的代码
menus.show_index()
包:all
默认情况下,包中所有的模块都是可以直接导入的,同样为了使用方便,可以通过通配符的方式来一次引入包中所有指定的模块
all属性就是用于模糊导入的特殊魔法属性,值是一个包含模块名称的列表,主要声明在init.py文件中,用于定义可以使用通配符的方式引入的模块
demo03/users/init.py
all = [‘module’, ‘manager’, ‘menus’]
此时可以在main.py中通过通配符的方式将all包含的模块一次性导入
from users import*
就相当于 from users import module,manager,menus
包和模块小结:
import导入
基本语法:
导入一个包/模块
import 包名称/模块名称
导入一个包中的某个模块
import 包名称.模块名称
导入一个包中的某个模块中的某个函数
import 包名称.模块名称.类型名称
for import 导入
基本语法结构
导入一个包中的所有模块all定义的模块
from 包名称 import*
导入一个包中指定的模块
from 包名称 import 模块名称
导入一个包中指定模块中的某个类型
from 包名称.模块名称. import 类型名称
安装第三方模块的方法
pip的意思:package index python/python install package
1.pip install pymysql
2.下载pymysql压缩包->解压->python setup.py install
3.pip install <module_name> 安装一个第三方模块
4.pip uninstall<module_name> 卸载一个第三方模块 此方法卸载不掉的话,找到安装目录,手动卸载
5.pip list 查看当前解释器中安装的所有第三方模块
本地发布
在我们已经开发好的一个包文件夹下,创建一个python模块:setup.py
模块中定义如下内容
引入构建包信息的模块
from distutils.core import setup
定义发布的包文件的信息
setup(
name=“damu_pkg01”, # 发布的包文件名称
version=”1.0”, # 发布的包的版本序号
description=”我的测试包”, # 发布包的描述信息
author=”my name”, # 发布包的作者信息
author_email=”damu@163.com”, # 作者联系邮箱信息
py_modules=[‘init.py’,’..’,..]# 发布的包中的模块文件列表
)
执行当前程序包文件的构建操作命令:按照标准格式组织包中的所有数据文件
python setup.py build
REMARK:构建完毕的文件
可以通过python setup.py install命令直接当成第三方模块进行安装
执行命令进行包的打包发布
python setup.py sdist
REMARK:打包的文件,主要是方便进行网络传输,打包之后会在dist中创建包含包中所有信息的tar.gz压缩包文件;该文件就可以通过git等方式提交给对应的开源组织发布自己的自定义模块了
网络发布
经历了前面一小节的操作之后,我们自己的包也可以上传到网站上,并且别人可以通过pip install 包名称 来下载安装我们自己的包
首先,进入(http://pypi.org)网站上,注册一个自己的账号
这个网站是目前大部分python第三方模块集中的一个管理社区平台
其次:准备好你自己的python程序包,并在包中写入一个setup.py文件
文件内容为
#引入构建包信息的模块
from distutils.core import setup
#定义发布的包文件信息
setup(
name="wang_test",
version="1.0.00.001",
description="我的第二个测试包",
author="人间不值得",
author_email="1851524312@qq.com",
py_modules=['__init__','enginer','func','main','name','readme','tools']
在setup.py中,已经定义好了程序包的所有描述信息
在自定义的包中,需包含一个或多个.py文件,如果需要上传图片或音频之类,需要在文件中有一个MANIFEST文件
init.py
moduels.py
manager.py
menus.py
setup.py
01.先在命令行通过cd命令到自定义的包中,然后通过
python setup.py build
构建完毕的文件,生成一个build文件夹
02.执行打包命令
python setup.py sdist
生成一个dict文件夹,里面是生成的压缩包文件
03.接下来是上传打包的内容到网站
首先安装第三方模块:twine,用于上传我们打包的项目文件
pip install twine
上传项目
twine upload dist/*
输入账号密码,上传成功
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: 17839755029
Enter your password:
Uploading wdj-1.0.tar.gz
0%| | 0.00/3.42k [00:00<?, ?B/s]100%|█| 3.42k/3.42k [00:01<00:00, 2.68kB/s]
上传成功!
ps:容易出现的错误:
01.在setup.py中,py_moudles=['init'......],里面的文件名称都是不带.py等后缀名的
02.有时会出现这个错误:
HTTPError: 403 Client Error: The user '17839755029' isn't allowed to upload to project 'plane'. See https://pypi.org/help/#project-name for more information. for url: https://upload.pypi.org/legacy/
这是由于需要上传的那个文件由于某种原因不能上传,setup.py中的name名称需要和包的名称相同