美文网首页
使用python中的模块(import)

使用python中的模块(import)

作者: 也是如此 | 来源:发表于2018-08-13 22:15 被阅读32次

    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名称需要和包的名称相同

    相关文章

      网友评论

          本文标题:使用python中的模块(import)

          本文链接:https://www.haomeiwen.com/subject/gzfpbftx.html