python自己写包_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,可以参考文章开头官网的打包流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值