• Python学习笔记(十五)模块与客户端


    模块

    Python标准模块

    内置库或内置模块是 Python 的组成部分,随 Python 解释器一起安装在系统中。
    math 模块:提供了数值运算函数、幂对数函数、三角对数函数和高等特殊函数等类型。
    time 模块: 提供各种操作时间的函数。( datetime calendat 模块)
    time.sleep(secs) :推迟调用线程的运行, secs 的单位是秒;
    比如:当连续爬虫时,当爬取当前网页后让程序暂停几秒然后再爬取,突破反扒机制
    time.time() :以秒为单位以浮点数返回历元之后的时间。
    常用作计时: exe_time=ending_time-strating_time
    time.clock( ) :用以浮点数计算的秒数返回当前的 CPU 时间。 用来衡量不同程序的耗时,比
    time.time() 更有用。

    模块的下载

    自己下载(官网)

    PyPI(Python Package Index) python 官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI
    https://pypi.org ,该站点列出 Python 语言超过 14 万个第三方库的基本信息

     使用命令行pip语句自动下载

    pip(python install packages )
    PyPI 推荐使用 pip 包管理器来下载第三方库,可跨平台且后续版本已内置而无需安装。
    pip 工具由 Python 官方提供并维护,是常用且高效的在线第三方库安装工具。
    pip 需要在 cmd 命令行(而非 IDLE )下执行。 (win+R>>>)

    pip常用语句合集

    pip命令实例说明
    pip download SomePackage[==version]
    下载扩展库的指定版本,不安装
    pip freeze [> requirements.txt]
    requirements 的格式列出已安装模块
    pip list
    列出当前已安装的所有模块
    pip install SomePackage[==version]
    在线安装 SomePackage 模块的指定版本
    pip install SomePackage.whl
    通过 whl 文件离线安装扩展库
    pip install package1 package2 ...
    依次(在线)安装 package1 package2 等扩展模块
    pip install -r requirements.txt
    安装 requirements.txt 文件中指定的扩展库
    pip install --upgrade SomePackage
    升级 SomePackage 模块
    pip uninstall SomePackage[==version]
    卸载SomePackage模块的指定版本

     pip下载常见问题

    1、下载速度慢——使用镜像源

    Windows 系统下,使用 pip 会遇到超时的问题,导致第三方库无法顺利安装, 需要设置国内镜像源。
    pip install -i <国内镜像> <第三方库名称>
    例如 :pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider
    清华: https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云: http://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学: http://pypi.hustunique.com/
    豆瓣: http://pypi.douban.com/simple/
    使用镜像源后,pip扩展包的速度不会受到限制。

    离线安装

    whl包安装

    pip install XlsxWriter-1.0.5-py2.py3-none-any.whl

    tar.gz包安装或安装zip

    加压当前文件,并寻找当目录中 setup.py 文件
    在当前目录中的 cmd 中执行python setup.py install

    pip和conda的区别

    两者的部分功能相同,但确实要根据不同的场景和目的进行选择和使用。
    Pip
    pip Python 包管理工具,可用于从 Python 软件包索引 (Python Package Index)——PyPI 安装
    软件包。
    pip 在递归的串行循环中安装依赖项,不会确保同时满足所有软件包的依赖关系。
    Conda
    Conda 是一个跨平台的软件包(不限于 Python ,任何语言都可)和环境管理器 ;
    Conda 能够创建隔离的环境,该环境可以包含不同版本的 Python 以及其他软件包。
    conda 使用 SAT satisfiability solver 来验证是否满足环境中安装的所有软件包的所有要求。
    此检查可能需要花费更多时间,但有助于防止环境被破坏。
    conda pip 做的更多, conda 可以调和所有有包 ( 包括 python ) 之间的库依赖;而 pip 更关注python包,会忽略非 python 包的库依赖。
    有的时候(比如pytorch环境配置和tensorflow安装),对于不同扩展包有不同版本的限制,这时,就需要使用conda配置不同扩展包特定的版本以适应需求

    打开conda命令行

    Windows 用户请打开“ Anaconda Prompt” macOS Linux 用户请打开 Terminal” (“终端”)进行操作。

    运行环境展示:

     

    创建新环境

    conda create --name  

    即创建的环境名。建议以英文命名,且不加空格。
    即安装在环境中的包名。
    若要安装指定的版本号,则只需要在包名后面以 = 和版本号的形式执行。
    如: conda create -- name python2 python=2.7,即创建一个名为“ python2” 的环境,环境中安装版本为 2.7 的python
    若在新创建的环境中创建多个包,则直接在 后以空格隔开,添加多个包名
    即可。如: conda create -n python3 python=3.5 numpy pandas ,即创建一个名为“python3” 的环境,环境中安装版本为 3.5 python ,同时也安装了 numpy pandas
    提示:默认情况下新创建的环境将会被保存在 /Users//anaconda3/env 目录下,其中, 为当前用户的用户名。

    更多管理环境

    切换环境:
    activate
    退出环境至:
    root deactivate
    显示已创建环境:
    conda env list
    复制环境:
    conda create --name --clone
    删除环境:
    conda remove --name --all

     安装扩展包

    在指定环境中安装包
    conda install --name
    即将包安装的 指定环境名 。环境名两边不加尖括号“ <>”
    即要 安装的包名 。包名两边不加尖括号“ <>”

    在当前环境中安装包
    conda install

     即要安装的包名。包名两边不加尖括号“<>”

    卸载安装包

    卸载指定环境中的包
    conda remove --name
    即卸载包所在指定环境的名称。环境名两边不加尖括号“ <>”
    即要卸载包的名称。包名两边不加尖括号“ <>”
    卸载当前环境中的包
    conda remove

     即要卸载包的名称。包名两边不加尖括号“<>”

    更新所有包

    conda update --all

     更新指定包

     conda update

    常用的模块:skelearn、numpy、matplotlib、scipy等等

    描述及其内容查询(直接在console里面输入即可)

    help(module-name)
    查看任意模块中所有的对象列表
    1. >>> import math
    2. >>> help(math)
    3. Help on built-in module math: NAME
    4. math
    5. DESCRIPTION
    6. This module provides access to the
    7. mathematical functions
    8. defined by the C standard.
    9. -- More --
    dir(obj)
    查看任意模块中的对象列表
    1. >>> dir(math)
    2. [‘ __doc __', '__file __', ' __name __',
    3. 'acos', 'asin', 'atan', 'atan2', 'ceil',
    4. 'cos', 'cosh', 'degrees', ‘e', 'exp',
    5. 'fabs', 'floor', 'fmod', 'frexp', 'hypot',
    6. 'ldexp', 'log', 'log10', 'modf', ‘pi',
    7. 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan',
    8. 'tanh']
    导入模块时的文件搜索顺序
    当前文件夹
    sys.path 变量指定的文件夹
    标准库库目录
    需要导入多个模块,建议按如下顺序进行导入:
    标准模块
    成熟的第三方扩展模块
    自己开发的模块

    模块搜索路径sys.path

    该方法适用于自己构建的module与正在运行的py不在同一个位置,由于编辑器查找完同目录的module后,会再查找path中的,所以我们可以使用sys.path.append通过增加临时搜索路径,使得在不同位置的module也可以调用。

    sys 模块的 sys.path 属性返回一个路径列表。
    使用 import 语句导入模块时,系统自动从
    该列表的路径中搜索模块,如果没有找到,
    则程序报错。
    临时增加模块搜索路径:
    1. import sys
    2. sys.path.append("c:\\pythompa\works")
    1. >>> import sys
    2. >>> sys.path
    3. ['D:\\Program\\Anaconda\\python39.zip',
    4. 'D:\\Program\\Anaconda\\DLLs',
    5. 'D:\\Program\\Anaconda\\lib',
    6. 'D:\\Program\\Anaconda',
    7. '',
    8. 'D:\\Program\\Anaconda\\lib\\site-packages',
    9. 'D:\\Program\\Anaconda\\lib\\site-packages\\win32',
    10. 'D:\\Program\\Anaconda\\lib\\site-packages\\win32\\lib',
    11. 'D:\\Program\\Anaconda\\lib\\site-packages\\Pythonwin',
    12. 'C:\\Users\\Administrator\\Desktop\\11']

    为了帮助理解,再举一个实例

    上图中,fangchengjie这个.py位于D盘的mokuai里面,而ceshi2位于C盘中,通过使用sys.path.append,可以实现不同位置的直接调用 。

    如此一来就可以调用了,代码如下

    1. import sys
    2. sys.path.append(r"D:\mokuai")
    3. from fangchengjie import solution
    4. print(solution(4,5,3))

    调用模块

    1 .导入整个模块
    import moduels( 模块名字)
    2. 导入整个模块并重命名
    import moduels (模块名字) as XX
    3. 从一个模块里导入某函数方法
    from modules( 模块名字 ) import func(方法或类)
    # 也可重命名:
    from modules( 模块名字 ) import func( 方法) as XX
    4. 从一个包的模块里导入方法
    from package.modules import func(方法或类)
    也可以用别名表示,
    from modules( 模块名字 ) import func( 方法) as XX
    5.module中的全部函数方法(或叫做成员)都导入到当前的global namespace中 (谨慎使用)
    from moduels import *

    模块整体和部分引入

    模块整体引入

    基本格式:
    import module_name
    引用格式:module_name
    1. >>> import math
    2. >>> math.sin(30)
    3. -0.9880316240

    模块部分引入

    基本格式:
    from module import func
    引用格式:func()
    1. >>> from math import sin
    2. >>> sin(30)
    3. -0.9880316240

    模块整体和部分重命名

    import 模块名 as 别名
    1. >>> import math as m
    2. >>> m.sin(30)
    3. -0.9880316240
    from 模块名 import 对象名 as 别名
    1. # 可以减少查询次数,提高执行速度
    2. >>> from math import sin as f
    3. >>> f(30)
    4. -0.9880316240

    .pyc文件(按照字节编译的文件类型)

    .pyc 文件是经过编译后的字节码,这样下次导入时,如果模块源代码 .py 文件 没有修改(通过比较两者的时间戳),则直接导入 .pyc 文件,从而提高程序效 率。
    编译前.py->编译后.pyc

    Python中的包

    为了组织好模块,通常会将 多个模块放在一个包 ( 文件夹 )
    包是 python 模块文件所在的 目录,且该目录下必须存在 __init__.py 文件(文件内容 可以为空)。
    包的主要结构:

    从包中导入模块

    如果 main.py 想要引用 package_a 中的模块 modulea1
    引入整个模块
    import [包名1.[包名2…]].模块名
    1. import urllib.request
    2. #导入urllib包中的request模块
    3. urllib.request.urlopen(url_robots) #调用模块中的方法
    引入模块中的函数
    from [包名1.[包名2…]].模块名 import 函数名
    1. from urllib.request import urlopen
    2. urlopen(url)

     不同包之间的相互调用

    如果 package_a 中的 module_a1 需要引用 package_b ,那么默认情况下, Python 是找 不到 package_b 的。
    可以在 package_a 中的 __init__.py 中添加 sys.path.append('../')” 将该包下的所有 module 都添加 * import __ init __ 即可。

    模块的制作

    在Python中的每个Python文件均可以作为一个模块,模块的名子就是文件名,USER可以自己创建自己的模块。
    tip: 注意:要处于同一目录下。
    1. # text.py文件
    2. def add(a,b)
    3. return a + b
    4. def product(a,b)
    5. return a*b
    6. #调用
    7. >>> from text import add
    8. >>> result = add(11, 12)
    9. 23

    模块测试

    在实际开发中,当一个程序员编写完一个门模块中,为了让函数在项目中达到 想要的效果,往往在 py 文件中添加以下测试信息。
    实例
    1. # text.py文件
    2. def add(a,b)
    3. return a + b
    4. result = add(12,22) #测试信息
    5. print(“int test.pyfile,12+22={}”.format(result))
    6. #调用
    7. >>> import text
    8. >>> result = add(11, 12)
    9. >>> print(result)
    10. int test.pyfile,12+22=34
    11. 23

    其中一个重要的属性就是__name__属性

    通过__name__属性,可以实现在脚本运行时:

    • 假如是单独运行该module,那么运行后面的测试代码,程序员可以看到自己设计的module是否符合自己的要求
    • 假如是导入该module后在程序中使用,则该测试代码不会运行,(类似于被注释掉的感觉)

     实例

    1. # text.py文件
    2. def add(a,b):
    3. return a+b
    4. def product(a,b):
    5. return a*b
    6. #用来进行测试
    7. if __name__=='__main__':
    8. rel=add(1,2)
    9. print('int test.py file,1+2=%d'%rel)
    1. # a.py文件中调用模块
    2. >>> from text import add
    3. >>> result = add(1,2)
    4. >>> print(result)
    5. 3

    上述代码,假如直接测试该模块,那么__name__就等于__main__后面的测试代码就会运行,假如该模块是import到程序里面的,那么__name__就不会自动转换为__main__,故后面的代码就不会运行。

    模块的发布

    (1)将模块放在setup.py

    (2) 编辑 setup.py 文件,指明需要包含哪 py 文件
    1. from distutils.core import setup
    2. setup(
    3. name="itheima",
    4. version="1.0",
    5. description="itheima belongs to itcast",
    6. author="itcast",
    7. py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'] )
    (3) 命令窗口中,使用 built 命令 构建模块
    python setup.py build

    构建后的目录结构 

     

    (4) 使用 sdist 命令生成发布压缩
    python setup.py sdist

     

    补充知识点(time模块)

    time.sleep(secs)
    作用:在给定的秒数内挂起调用线程的执行。
    参数:秒数,参数可以是一个浮点数,表示更精确的睡眠时间。
    time.time()-->float # 常用作计算程序的运行时间
    作用:以秒为单位以浮点数返回历元之后的时间
    1. >>> strating_time=time.time()
    2. >>> for i in range(4):
    3. >>> print(i**3)
    4. >>> ending_time=time.time()
    5. running_time= strating_time- endinging_time

    传送门:Python全套学习笔记

  • 相关阅读:
    【ESP32】串口+wifi 透传,以及回调函数的使用
    1024——今天我们不加班
    手机cpu架构查看及armeabi、armeabi-v7a、arm64-v8a及x86等说明
    管理多个Instagram帐户防关联小技巧大分享
    第二部分—C语言提高篇_12. 动/精态库的封装和使用
    【python】(十八)python常用第三方库——pymysql
    从0开始实现深度估计
    THP Maleimide,1314929-99-1,THP-Mal凯新生物双功能螯合剂
    深度学习概览
    快速学会git版本管理——创建分支和合并分支
  • 原文地址:https://blog.csdn.net/weixin_60535956/article/details/127733854