文章目录

  • 1. 模块化编程的一般流程:
  • 2. 包 (package)
    • 导入包
  • 3. `sys.path`和模块的搜索目录
  • 4. venv 就是 虚拟环境
  • 5. 模块的发布和安装
    • 本地安装模块
    • 网站发布
      • 【注】
      • 上传并远程发布
      • 管理你的模块
  • 6. 常用第三方库大汇总
  • 音频视频 多媒体库
  • ffmpeg
    • 更多资源推荐

1. 模块化编程的一般流程:

  1. 设计 API,进行功能描述。
  2. 编码实现 API 中描述的功能。
  3. 在模块中编写测试代码,并消除全局代码。
  4. 使用私有函数实现不被外部客户端调用的模块函数。
import #导入模块,也就是文件
from import #导入 模块里面的成员  (函数或者一个类)  文件下的 内容
import ... 模块名 as  模块别名
from math import*   #这样的话 你可以直接用了,比如直接sin(),但是 一般不建议使用*
from math import sin,pi #这样和上面效果  相同,但是  上面的看不到 具体导入什么 内容,这里可以看见
__import__()   # 动态导入
s = math
m = __import__(s)
print(m.pi)   #  不过一般 不建议  自行使用  动态导入
import importlib #模块   建议动态导入,使用这个模块
a =importlib.import_module('math')

2. 包 (package)

  1. 包相当于文件夹,用来组织管理 模块
  2. 文件夹 必须包含一个 __init__.py 文件 这就是一个
  3. 包下面还可以放 包

导入包

 #1 import a.aa.a# 导入 a包中的aa包中的a模块#2 from a.aa import a #导入 a包中的aa包中的a模块#3 from a.aa.a import fun_a   #直接导入a包(文件夹) 中的aa包(文件夹) 中的a模块(文件) 中的 函数(fun_a)
from package import item   #这种语法中,item   可以是包、模块、也可以是函数、类、变量。
import item1.item2 #这种语法  item1 必须是包或者模块 __init__.py
#  一般来说就是  用来批量导入的,  尽量不要随便  写一些乱起八糟的内容  进去
# 作为包的标识,不能删除.
# 用来实现模糊导入
# 导入 实质是执行 __init__.py 文件
# 可以在这个 文件里面 做这个包的初始化,以及需要统一执行的代码,以及 批量导入from ..import * # 模糊导入  会从对应的包中  导入 以上两个模块
# .. 是上级目录__all__
# 列表 里面 写入  * 导入的 模块
# 此方法 是写在 __init__.py 中的 方法
# 例如 __all__=["test"]from .. import *  # 导入上级目录,  from . 导入同级目录的 模块
# .. 和 .  上级 目录 和当前目录from .a import aa # 也可以这种写法. 从当前目录a 包 或者 a 模块中 导入 aa
from . import a # 从当前目录导入 a

3. sys.path和模块的搜索目录

一般按照如下路径寻找模块文件(按照顺序寻找,找 到即停不继续往下寻找):

  1. 内置模块
  2. 当前目录(编辑文件所在的目录)
  3. 程序的主目录(例如当前项目的文件夹就是 程序主目录)
  4. pythonpath 目录(如果已经设置了 pythonpath 环境变量)
  5. 标准链接库目录
  6. 第三方库目录(site-packages 目录)
  7. pth 文件的内容(如果存在的话)
  8. sys.path.append()临时添加的目录

4. venv 就是 虚拟环境

'C:\\Program Files\\Python37\\python37.zip', 'C:\\Program Files\\Python37\\DLLs', 'C:\\Program Files\\Python37\\lib' 就是标准库 链接

site-packages 目录下 添加 .pth文件 .pth. 这样子才能建立成功,一行写一个目录(当然现在的工具都帮你处理好了, 你只需要调用相应 的api 就行。 )

常用的工具

  • virtualenv
  • virtualenvwrapper
  • pipenv(我常用的是这个)

5. 模块的发布和安装

官网 模块发布教程 - python - 英文

模块打包和分发-英文文档-非常详细的用户指南

分发模块 - 中文文档 - 不够详细 - 但是有引用链接


  1. 本地发布
  2. 建立一个包
  3. 并且 写一个setup 发布模块

我们按照如下步骤即可实现模块的发布:

  1. 为模块文件创建如下结构的文件夹(一般,文件夹的名字和模块的名字一样(不一一样也没关系。)):
  • 当前文件夹(也就是你的 项目文件夹叫什么都可以)

    • onepis(包文件夹)

      • init.py
      • demo1.py
      • demo2.py
    • setup.py
  1. 在文件夹中创建一个名为『setup.py』的文件,内容如下:

关于自带工具 distutuls - python 中文文档

from distutils.core import setup
setup(
name='onepis', # 对外我们包的名字
version='1.0', # 版本号
description='这是第一个对外发布的模块,测试哦', # 描述
author='yaphets', # 作者
author_email='pisoneya@gmail.com',
py_modules=['onepis.demo1','onepis.demo2'] # 要发布的模块
)
# 这个方式比较古老了。 用的是自带的 分发系统。
# 还有个 工具 叫做 setuptools
# 具体 可以看我放出来 的 教程链接 在前面# setuptools 也是差不多的
from setuptools import setup
setup(name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own usernameversion="0.0.1",author="Example Author",author_email="author@example.com",description="A small example package",long_description=long_description,long_description_content_type="text/markdown",url="https://github.com/pypa/sampleproject",packages=setuptools.find_packages(),classifiers=["Programming Language :: Python :: 3","License :: OSI Approved :: MIT License","Operating System :: OS Independent",],python_requires='>=3.6',
)
  1. 构建一个发布文件。通过终端,cd 到模块文件夹 也就是你的 项目 所在 文件夹 下面,再键入命令:
python setup.py sdist
# 不管 你用的是  setuptools  还是  自带的 distutils 都可以用这个方法

本地安装模块

将发布安装到你的本地计算机上。仍在 cmd 命令行模式下操作,进 setup.py所在目
录,键入命令:

python setup.py install

安装成功后,我们进入 python 目录/Lib/site-packages 目录(第三方模块都安装的这
里,python 解释器执行时也会搜索这个路径

安装成功后,直接使用 import 导入即可。

import onsepis.demo1

网站发布

上传模块到 PyPI
将自己开发好的模块上传到 PyPI 网站上,将成为公开的资源,可以让全球用户自由使
用。按照如下步骤做,很容易就实现上传模块操作。

  • 注册 PyPI 网站

  • 注册 PyPI 网站:http://pypi.python.org

  • 创建用户信息文件 .pypirc

·方式 1: 使用命令(适用 Linux)

输入并执行后 python setup.py register,然后输入用户名和密码,即可。

·方式 2:使用文件(适用 windows,Linux

在用户的家目录里创建一个文件名为.pypirc, 内容为:
windows 的 家目录 也是 cd ~

[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = 账户名
password = 你自己的密码

【注】

Linux 的家目录: ~/.pypirc

Windows 的家目录是: c:/user/用户名

在 windows 下直接创建不包含文件名的文件会失败,因此创建时文件名为“.pypirc.”,
前后都有两个点即可。

上传并远程发布

进入 setup.py 文件所在目录,使用命令python setup.py sdist upload,即可以
将模块代码上传并发布:

管理你的模块

  • 我们登录 pypi 官网,可以看到:
    如果你的模块已经上传成功,那么当你登录 PyPI 网站后应该能在右侧导航栏看到管理
    入口。

点击包名进去后你可以对你的模块进行管理,当然你也可以从这里删除这个模块

其他人只需要使用 pip 就可以安装你的模块文件。比如:

pip install package-name

如果你更新了模块,别人可以可以通过 --update 参数来更新:

pip install package-name update

‘’’

6. 常用第三方库大汇总


################## 环境管理 ##################### P 非常简单的交互式 python 版本管理工具
Pyenv 简单的 Python 版本管理工具
Vex 可以在虚拟环境中执行命令
Virtualenv
virtualenvwrapper   创建独立 Python 环境的工具########### 包管理 ###########pip Python 包和依赖关系管理工具
pip-tools 保证 Python 包依赖关系更新的一组工具
Pipenv Python 官方推荐的新一代包管理工具
Poetry 可完全取代 setup.py 的包管理工具################# 包仓库 #################warehouse 下一代 PyPI
Devpi PyPI 服务和打包/测试/分发工具######### 分发(打包为可执行文件以便分发) ##############PyInstaller 将 Python 程序转成独立的执行文件(跨平台)
Nuitka 将脚本、模块、包编译成可执行文件或扩展模块
py2app 将 Python 脚本变为独立软件包(Mac OS X)
py2exe 将 Python 脚本变为独立软件包(Windows)
pynsist 一个用来创建 Windows 安装程序的工具,可
以在安装程序中打包 Python 本身########## 构建工具(将源码编译成软件) ##############Buildout 构建系统,从多个组件来创建,组装和部署应用
BitBake 针对嵌入式 Linux 的类似 make 的构建工具
Fabricate 对任何语言自动找到依赖关系的构建工具############### 交互式 Python 解析器 ##############IPython 功能丰富的工具,非常有效的使用交互式
Python
bpython 界面丰富的 Python 解析器
Ptpython 高 级 交 互 式 Python 解 析 器 , 构 建于 python-prompt-toolkit 之上########### 文件管理 Aiofiles 基于 asyncio,提供文件异步操作 ############Imghdr (Python 标准库)检测图片类型
Mimetypes (Python 标准库)将文件名映射为 MIME 类型
path.py 对 os.path 进行封装的模块
Pathlib (Python3.4+ 标准库)跨平台的、面向对象的
路径操作库
Unipath 用面向对象的方式操作文件和目录
Watchdog 管理文件系统事件的 API 和 shell 工具############ 日期和时间 #################Arrow 更好的 Python 日期时间操作类库
Chronyk 解析手写格式的时间和日期
Dateutil Python datetime 模块的扩展
PyTime 一个简单易用的 Python 模块,用于通过字符
串来操作日期/时间
when.py 提供用户友好的函数来帮助用户进行常用的日期和时间操作################## 文本处理 ##############chardet 字符编码检测器,兼容 Python2 和 Python3
Difflib (Python 标准库)帮助我们进行差异化比较
Fuzzywuzzy 模糊字符串匹配
Levenshtein 快速计算编辑距离以及字符串的相似度
Pypinyin 汉字拼音转换工具 Python 版
Shortuuid 一个生成器库,用以生成简洁的,明白的,URL安全的 UUID
simplejson Python 的 JSON 编码、解码器
Unidecode Unicode 文本的 ASCII 转换形式
Xpinyin 一个用于把汉字转换为拼音的库
Pygment 通用语法高亮工具
Phonenumbers 解析,格式化,储存,验证电话号码
Sqlparse 一个无验证的 SQL 解析器############### 特殊文本格式处理 ###############Tablib 一个用来处理中表格数据的模块
Pyexcel 用来读写,操作 Excel 文件的库
python-docx 读取,查询以及修改 word 文件
PDFMiner 一个用于从 PDF 文档中抽取信息的工具
Python-Markdown2 纯 Python 实现的 Markdown 解析器
Csvkit 用于转换和操作 CSV 的工具################ 自然语言处理 ########################NLTK 一个先进的平台,用以构建处理人类语言数据的
Python 程序
Jieba 中文分词工具
langid.py 独立的语言识别系统
SnowNLP 一个用来处理中文文本的库
Thulac 清华大学自然语言处理与社会人文计算实验室
研制推出的一套中文词法分析工具包################## 下载器 ##################you-get 一个 YouTube/Youku/Niconico 视频下载器################ 图像处理 ####################pillow 最常用的图像处理库
imgSeek 一个使用视觉相似性搜索一组图片集合的项目
face_recognition 简单易用的 python 人脸识别
python-qrcode 一个纯 Python 实现的二维码生成器################# OCR ################Pyocr Tesseract 和 Cuneiform 的 一 个 封 装(wrapper)
pytesseract Google Tesseract OCR 的 另 一 个 封 装(wrapper)################### 音频处理 ####################Audiolazy Python 的数字信号处理包
Dejavu 音频指纹提取和识别
id3reader 一个用来读取 MP3 元数据的 Python 模块
TimeSide 开源 web 音频处理框架
Tinytag 一个用来读取 MP3, OGG, FLAC 以及 Wave
文件音乐元数据的库
Mingus 一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能############### 视频和 GIF 处理 ##############Moviepy 一个用来进行基于脚本的视频编辑模块,适用于
多种格式,包括动图 GIFs
scikit-video SciPy 视频处理常用程序############### 地理位置 #################GeoDjango 世界级地理图形 web 框架
GeoIP MaxMind GeoIP Legacy 数据库的 Python API
Geopy Python 地址编码工具箱]#################### HTTP ######################requests 人性化的 HTTP 请求库
httplib2 全面的 HTTP 客户端库
urllib3 一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库############################ Python 实现的数据库#################pickleDB 一个简单,轻量级键值储存数据库
PipelineDB 流式 SQL 数据库
TinyDB 一个微型的,面向文档型数据库################## web 框架 ###################Django Python 界最流行的 web 框架
Flask 一个 Python 微型框架
Tornado 一个 web 框架和异步网络库##################### CMS 内容管理系统 #####################odoo-cms 一个开源的,企业级 CMS,基于 odoo
djedi-cms 一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能
Opps 一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django################ 电子商务和支付系统 ###################django-oscar 一个用于 Django 的开源的电子商务框架
django-shop 一个基于 Django 的店铺系统
Shoop 一个基于 Django 的开源电子商务平台
Alipay Python 支付宝 API
Merchant 一 个 可 以 接 收 来 自 多 种 支 付 平 台 支 付 的Django 应用############### 游戏开发 #####################Cocos2d 用来开发 2D 游戏
Panda3D 由迪士尼开发的 3D 游戏引擎,并由卡内基梅
陇娱乐技术中心负责维护。使用 C++ 编写, 针
对 Python 进行了完全的封装
Pygame Pygame 是一组 Python 模块,用来编写游戏
RenPy 一个视觉小说(visual novel)引擎############### 计算机视觉库 ########################OpenCV 开源计算机视觉库
Pyocr Tesseract 和 Cuneiform 的包装库
SimpleCV 一个用来创建计算机视觉应用的开源框架#################### 机器学习人工智能 ##############TensorFlow 谷歌开源的最受欢迎的深度学习框架
keras 以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络
Hebel GPU 加速的深度学习库
Pytorch 一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架
scikit-learn 基于 SciPy 构建的机器学习 Python 模块
NuPIC 智能计算 Numenta 平台############### 科学计算和数据分析 ###############NumPy 使用 Python 进行科学计算的基础包
Pandas 提供高性能,易用的数据结构和数据分析工具
SciPy 用于数学,科学和工程的开源软件构成的生态系统
PyMC 马尔科夫链蒙特卡洛采样工具###################### 代码分析和调试 ######################code2flow 把你的 Python 和 JavaScript 代码转换为流
程图
Pycallgraph 这个库可以把你的 Python 应用的流程(调用
图)进行可视化
Pylint 一个完全可定制的源码分析器
autopep8 自动格式化 Python 代码,以使其符合 PEP8
规范
Wdb 一个奇异的 web 调试器,通过 WebSockets
工作
Lineprofiler 逐行性能分析
Memory Profiler 监控 Python 代码的内存使用################## 图形用户界面 ##################Pyglet 一个 Python 的跨平台窗口及多媒体库
PyQt 跨平台用户界面框架 Qt 的 Python 绑定 ,支持 Qt v4 和 Qt v5
Tkinter Tkinter 是 Python GUI 的一个事实标准库
wxPython wxPython 是 wxWidgets C++ 类 库 和Python 语言混合的产物################## 网络爬虫和 HTML分析 ###########################Scrapy 一个快速高级的屏幕爬取及网页采集框架
Cola 一个分布式爬虫框架
Grab 站点爬取框架
Pyspider 一个强大的爬虫系统
html2text 将 HTML 转换为 Markdown 格式文本
python-goose HTML 内容/文章提取器################# 硬件编程 #################Ino 操作 Arduino 的命令行工具
Pyro Python 机器人编程库
PyUserInput 跨平台的,控制鼠标和键盘的模块
Pingo Pingo 为类似 Raspberry Pi,pcDuino,Intel
Galileo 等设备提供统一的 API

音频视频 多媒体库

pyqt 自带语音库

pyaudio 播放等

pudub 播放等

wave 读取

scipy 读取

libroosa 读取

udiolazy,数字信号处理(DSP)的Python工具包。

audioread,跨平台(GStreamer + Core Audio + MAD + FFmpeg)音频解码库。

beets,音乐库管理。

dejavu,音频指纹识别算法。Dejavu 听一次音频后就会记录该音频的指纹信息,然后可通过麦克风对输入的音频进行识别是否同一首歌。

django-elastic-transcoder,Django +亚马逊elastic转码。

eyeD3,音频文件工具,特别是MP3文件包含的ID3元数据。

id3reader,用于读取MP3的元数据。

mutagen,处理音频元数据。

pydub,-操纵音频和简单的高层次的接口。

pyechonest,Echo Nest API客户端。

talkbox,语音和信号处理的Python库。

TimeSide,开放的网络音频处理框架。

tinytag,读取音乐文件元数据,包括的MP3,OGG,FLAC和wave文件。


you-get 视频下载

QMediaplayer,QVideowidget 播放视频 音频

m3u8,用于解析m3u8文件。

moviepy,多格式视频编辑脚本模块,包括GIF动画。

shorten.tv,视频摘要。

scikit视频,SciPy视频处理例程。


GeoDjango,一个世界级的地理Web框架。

geopy,Geo地理编码的工具箱。

pygeoip,纯Python写的GeoIP API。

GeoIP,Python API接口,使用高精度GeoIP Legacy Database数据库。

geojson,GeoJSON函数库

django-countries,一个Django程序,提供国家选择,国旗图标的静态文件,和一个国家的地域模型。


Pygame,Python游戏设计模块。

Cocos2d,2D游戏框架,演示,和其他的图形/交互应用,基于pyglet。

PySDL2,SDL2的封装库。

Panda3D- 3D游戏引擎,迪士尼开发。用C++写的,完全兼容Python。

PyOgre,OGRE 3D渲染引擎,可用于游戏,模拟,任何3D。

PyOpenGL,绑定OpenGL和它相关的API。

PySFML,Python绑定SFML

RenPy,视觉小说引擎。


ffmpeg

python 中使用 ffmpeg的几种方式

其实有个播放器ffpyplayer 但是编译老失败,不想弄了

pyav 包

ffmpeg-python

imageio+pylab

python 执行 cmd命令

import os
import subprocess
os.chdir('C://Users/Alex/')
subprocess.call(['ffmpeg', '-i', 'picture%d0.png', 'output.avi'])
subprocess.call(['ffmpeg', '-i', 'output.avi', '-t', '5', 'out.gif'])
import osprint(os.popen("ffplay F:\音乐\spiderwy_music\网易原创歌曲榜\鸦雀无声.mp3").read())

更多资源推荐

awesome-python 中文版

awesome-python 英文原版

99_包(package)相关推荐

  1. java面向对象(包package)

    包package 对类文件进行分类管理 给类提供多层命名空间 写在程序文件的第一行 类名的全称是 包名.类名 包也是一种封装形式 包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修 ...

  2. Java的类(class)、包(package)和接口(interface)

    在Java中,类(class)是用来代表对象的基本单元.对象(object)可以是现实世界中的任何一个实体,它具有若干区别于其它对象的属性和操作.而类则通过为对象定义属性和操作来概括一类实体.它封装了 ...

  3. python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)

    如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...

  4. Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...

    Python中,想要安装第三方安装包,即third library,package等,对于熟悉的人来说,很简单. 但是对于新手,至少对于之前的我,很难,往往只是安装一个很小的包,都被搞得一头雾水. 现 ...

  5. python中大括号是什么_Python中模块(Module)和包(Package)到底是什么,有什么区别?...

    1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个 ...

  6. java package 目录_修改jar包package目录结构操作方法

    本文将为您描述修改jar包package目录结构操作方法,具体操作过程: 开发中会遇到用第三方的jar包,有时候会出现不同的jar包,包名一致的情况,这就会引发运行时异常,找不到相应的jar包. 这种 ...

  7. java从包package中获取所有的Class

    1.从包package中获取所有的Class方法: /** * 从包package中获取所有的Class * @param pack * @return */ public static List&l ...

  8. node学习:包package,Buffer缓存和fs文件系统

    1. 包package 包实际上是一个压缩文件,解压以后还原为目录.包里存放的是模块.符合规范的目录如下.包结构: package.json   描述文件(必有) bin    可执行二进制文件 li ...

  9. Java包(package)

    Java包package 1.包的概念 2.包的定义 3.常见包 4.包的引入 1.包的概念 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用: 把功能相似或相关的类或接口 ...

最新文章

  1. 【机器学习】数据不平衡问题都怎么解?
  2. ViewPager实现页面切换
  3. leetcode 922. 按奇偶排序数组 II(双指针)
  4. 计算机基础简介、编程语言、翻译器、数据储存
  5. 标志寄存器操作(待续)
  6. 我们的系统是否需要EJB3?
  7. npm中强制关闭node.js
  8. 凸优化第四章凸优化问题 4.3 线性规划问题
  9. eclipse 汉化
  10. 如何使用 DiskGenius 合并分区
  11. 纠正英语语法错误---Grammarly安装
  12. 1、spring之Resource加载
  13. 常见无线电重点频段划分及参数设置
  14. 叁德悟带你认识四大名香
  15. 杨军的计算机等级证书,杨军-中国科学院大学-UCAS
  16. 【信息系统项目管理师】第八章 质量管理思维导图
  17. vue拖动滑块验证组件
  18. [html] 写一个鼠标跟随的特效
  19. 如何查看Linux版本.
  20. Programing Exercise 4:Neural Networks Learning

热门文章

  1. 杂谈:倘若flash支持JPEG XR格式?
  2. 【月夜特效------附 效果+源代码】
  3. android调用外部导航(百度,高德)
  4. excel计算二元线性回归_用人话讲明白梯度下降Gradient Descent(以求解多元线性回归参数为例)...
  5. 智能合约在衍生品上的应用_5种衍生品在您的机器学习面试中表现出色
  6. UWB协议:IEEE 802.15.4A‐2011学习
  7. merge和AMVP
  8. Google CardBoard SDK for Unity集成指南
  9. 蓝桥杯 输入信用卡号码
  10. 记一次IOS打包报错