Python将自己写的模块进行打包
将项目打包成模块的想法来自于flask文档教程,这不是在PyCon上和阿明合了照嘛,这不得多看看人家的东西。有兴趣的可以看看文档的项目可安装化部分,作者将flask项目打包成一个包,使其可以再任何地方导入项目并允许,也可以通过
pip install youproject.whl的方式来安装项目并安装相关的依赖。
可以先瞄一眼官方的打包指南:跳转
1.setuptools简介
setuptools是distutils(自行百度)增强版。其扩展了很多功能,能够帮助开发者更好的创建和分发 Python 包。大部分 Python 用户都会使用更先进的 setuptools 模块。
2.包格式
Python 库打包的格式包括 Wheel 和 Egg。Egg 格式是由 setuptools 在 2004 年引入,而 Wheel 格式是由 PEP427 在 2012 年定义。使用 Wheel 和 Egg 安装都不需要重新构建和编译,其在发布之前就应该完成测试和构建。现在普遍用
Wheel的比较多
3.setup.py文件
from setuptools import find_packages, setup
setup(
name='flaskr',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
相关参数可以[查看](https://setuptools.readthedocs.io/en/latest/setuptools.html#metadata)
常用参数解释:
| 参数名 | 解释 |
|---|---|
| name | 包名称 |
| version | 包版本 |
| author | 程序的作者 |
| author_email | 程序的作者的邮箱地址 |
| maintainer | 维护者 |
| maintainer_email | 维护者的邮箱地址 |
| url | 程序的官网地址 |
| license | 程序的授权信息 |
| description | 程序的简单描述 |
| long_description | 程序的详细描述 |
| platforms | 程序适用的软件平台列表 |
| classifiers | 程序的所属分类列表 |
| keywords | 程序的关键字列表 |
| packages | 需要处理的包目录(通常为包含 init.py 的文件夹) |
| py_modules | 需要打包的 Python 单文件列表 |
| download_url | 程序的下载地址 |
| cmdclass | 添加自定义命令 |
| package_data | 指定包内需要包含的数据文件 |
| include_package_data | 自动包含包内所有受版本控制(cvs/svn/git)的数据文件 |
| exclude_package_data | 当 include_package_data 为 True 时该选项用于排除部分文件 |
| data_files | 打包时需要打包的数据文件,如图片,配置文件等 |
| ext_modules | 指定扩展模块 |
| scripts | 指定可执行脚本,安装时脚本会被安装到系统 PATH 路径下 |
| package_dir | 指定哪些目录下的文件被映射到哪个源码包 |
| requires | 指定依赖的其他包 |
| provides | 指定可以为哪些模块提供依赖 |
| install_requires | 安装时需要安装的依赖包 |
| entry_points | 动态发现服务和插件,下面详细讲 |
| setup_requires | 指定运行 setup.py 文件本身所依赖的包 |
| dependency_links | 指定依赖包的下载地址 |
| extras_require | 当前包的高级/额外特性需要依赖的分发包 |
| zip_safe | 不压缩包,而是以目录的形式安装 |
3.1. find_packages(where='',exclude=(),include=('*',))
上面的setup.py中使用的find_packages(),可以方便的为我们添加包不需要手动添加。默认搜索与setup.py同级目录下各个含有__init__.py的目录作为要添加的包。
函数的第一个参数用于指定哪个目录下搜索包,参数
exclude用于指定排除哪些包,include指定要包含的包。
3.2. include_package_data:
设置为True,自动添加包中受版本控制的数据文件,当需要添加没有被版本控制的文件时,需使用
package_data。
3.3manifest.in文件(与setup.py同级目录)
文件内容就是需要保护在分发包中的文件
include flaskr/schema.sql
graft flaskr/static
graft flaskr/templates
global-exclude *.pyc
复制所有
static和templates文件夹中的文件,schema.sql文件,但是排除所有字节文件。
3.4. zip_safe
zip_safe参数决定包是否作为一个zip压缩后的 egg 文件安装,还是作为一个以 .egg 结尾的目录安装。因为有些工具不支持 zip 压缩文件,而且压缩后的包也不方便调试,所以建议将其设为 False,即zip_safe=False
3.5. install_requires
如果你的包依赖于其他包,可以指定
install_requires参数,为一个列表
install_requires=[
'requests>=1.0',
'flask>=1.0'
]
默认从pypi下载安装指定依赖包,也可以指定链接下载依赖
dependency_links = [
"http://packages.example.com/snapshots/foo-1.0.tar.gz",
"http://example2.com/p/bar-1.0.tar.gz",
]
4.本地测试安装
pip3 install -e .
在当前文件夹中寻找setup.py并在开发模式下安装,安装好后通过
pip list即可查看本地安装的情况。换个文件夹开始导入你的包进行测试,是否可以正常使用。
5.构建发行文件
先安装好wheel库
pip3 install wheel
安装好后,执行
bdist_wheel构建发行文件
python3 setup.py bdist_wheel
会生成
dist目录,下面有一个flaskr-1.0.0-py3-none-any.whl类似的由项目名称、版本号和项目安装要求的标记组成。复制该文件到别的计算机,通过pip命令安装该文件。
6.发布包(简略)
如果要将包发布到PyPI(Python Package Index)官方维护的第三方包仓库,需要先注册pypi的账号,然后创建
~/.pypirc文件进行一些配置
[distutils]
index-servers = pypi
[pypi]
username:xxx
password:xxx
注册项目
python3 setup.py register
成功注册后,构建源码包发布
python3 setup.py sdist upload
最后的最后,别忘了
README.md和LICENSE,最好再加上requirements.txt,可以参考文章开头官网的打包流程
Python将自己写的模块进行打包的更多相关文章
- pyinstaller如何将自己写的模块一并打包到exe中
使用pyinstaller命令 pyinstaller -F main.py 打包时,若mian.py代码中存在引入自己写的模块,而打包成exe文件时,并不会自动引入自己写的模块,打包成功后,点击打开 ...
- Python学习手册之__main__ 模块,常用第三方模块和打包发布
在上一篇文章中,我们介绍了 Python 的 元组拆包.三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块.常用第三方模块和打包发布 ...
- python模块的打包
python模块的打包方法: http://blog.csdn.net/five3/article/details/7847551
- python 写 excel 模块 : xlwt
主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...
- python学习笔记之常用模块(第五天)
参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...
- python+pygame游戏开发之使用Py2exe打包游戏
最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...
- Python第五章__模块介绍,常用内置模块
Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群 群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...
- 一句python,一句R︱模块导入与查看、数据读写出入、数据查看函数、数据类型、遍历文件
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas中有类似R中的read.table的功能,而 ...
- python之旅:常用模块
一.time与datetime模块 在Python中,通常有这几种方式来表示时间 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1号00:00:00开始按照秒计算的偏移量.我们 ...
随机推荐
- CodeForces 909F
题意略. 思路: 第一问: 递归地来写,找对称,发现关于(1<<y) - 1和(1<<y)对称的数字做 & 结果为0. 第二问: 6,7特殊考虑.循环左移(1<& ...
- 多线程环境中安全使用集合API(含代码)
转自: http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于 ...
- 关于python的特殊方法
最近在阅读<流畅的python>这本书,在第一章中作者就提到了几个python中的特殊方法,代码入下: class FrenchDuck: ranks = [str(n) for n in ...
- Python--编码与字符串
为什么字符串要编码呢? 因为计算机只能处理数字,最底层的CPU只能识别0和1.所以字符串就需要编码成对应的数字. 在计算机中,最开始只有ASCII,我们开始接触计算机编程时就学了ASCII码.最早只有 ...
- TextCNN 代码详解(附测试数据集以及GitHub 地址)
前言:本篇是TextCNN系列的第三篇,分享TextCNN的优化经验 前两篇可见: 文本分类算法TextCNN原理详解(一) 一.textCNN 整体框架 1. 模型架构 图一:textCNN 模型结 ...
- 迁移桌面程序到MS Store(10)——在Windows S Mode运行
首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...
- ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
报错 Traceback (most recent call last): File "D:/PyCharm 5.0.3/WorkSpace/2.NLP/2.获取数据源和规范化/4.word ...
- Python数据类型详解——字典
Python数据类型详解--字典 引子 已经学习了列表,现在有个需求--把公司每个员工的姓名.年龄.职务.工资存到列表里,你怎么存? staff_list = [ ["Kwan", ...
- [python]专用下划线标识符
1. python用下划线作为变量前缀和后缀,来指定特殊变量. _xxx: 不用'from module import *'导入,一般被看作是私有的,在模块或类外不可用使用. __xxx__: 系统定 ...
- lightoj 1046 - Rider(bfs)
A rider is a fantasy chess piece that can jump like a knight several times in a single move. A rider ...