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 万个第三方库的基本信息
Python学习笔记(十五)模块与客户端_第1张图片

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

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

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” (“终端”)进行操作。
Python学习笔记(十五)模块与客户端_第3张图片

运行环境展示:

 Python学习笔记(十五)模块与客户端_第4张图片

创建新环境

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等等

Python学习笔记(十五)模块与客户端_第5张图片

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

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

模块搜索路径sys.path

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

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

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

Python学习笔记(十五)模块与客户端_第6张图片

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

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

import sys
sys.path.append(r"D:\mokuai")
from fangchengjie import solution
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
>>> import math
>>> math.sin(30)
-0.9880316240

模块部分引入

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

模块整体和部分重命名

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

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

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

Python中的包

为了组织好模块,通常会将 多个模块放在一个包 ( 文件夹 )
包是 python 模块文件所在的 目录,且该目录下必须存在 __init__.py 文件(文件内容 可以为空)。
包的主要结构:
Python学习笔记(十五)模块与客户端_第7张图片

从包中导入模块

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

Python学习笔记(十五)模块与客户端_第8张图片

 不同包之间的相互调用

如果 package_a 中的 module_a1 需要引用 package_b ,那么默认情况下, Python 是找 不到 package_b 的。
可以在 package_a 中的 __init__.py 中添加 sys.path.append('../')” 将该包下的所有 module 都添加 * import __ init __ 即可。
Python学习笔记(十五)模块与客户端_第9张图片

模块的制作

在Python中的每个Python文件均可以作为一个模块,模块的名子就是文件名,USER可以自己创建自己的模块。
tip: 注意:要处于同一目录下。
# text.py文件
def add(a,b)
return a + b
def product(a,b)
return a*b

#调用
>>> from text import add
>>> result = add(11, 12)
23

模块测试

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

#调用
>>> import text
>>> result = add(11, 12)
>>> print(result)
int test.pyfile,12+22=34
23

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

Python学习笔记(十五)模块与客户端_第10张图片

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

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

 实例

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

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

模块的发布

(1)将模块放在setup.py

Python学习笔记(十五)模块与客户端_第11张图片

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

构建后的目录结构 

 Python学习笔记(十五)模块与客户端_第12张图片

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

 Python学习笔记(十五)模块与客户端_第13张图片

补充知识点(time模块)

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

传送门:Python全套学习笔记

你可能感兴趣的:(Python入门,python,开发语言)