python库打包

一、背景

想让自己写的python库可以使用pip install xxx安装。

二、环境准备

  • 注册PYPI账号
  • 已经写好的能正常使用的库/方法/项目(可以本地调用)
  • 安装依赖库setuptoolstwinw
pip install setuptools
pip install twine  # 简化将库发布到PYPI流程的工具
pip install wheel  # 制作whl文件需要

三、步骤

1. 调整目录结构

参考python项目打包结构

|--mypackage__init__.py__version__.py|--common|--config|--src
setup.py
requirements.txt
LICENSE
README.rst
MANIFEST.in
.gitnore

目录文件的作用:

  • MANIFEST.in
    当你使用 Python 的打包工具(如 setuptools 或 distutils)创建分发包时,
    它们只会自动包含项目目录中的 Python 模块和包。但是,在某些情况下,你可
    能还需要在分发包中包含一些其他的文件,如文档、配置文件、数据文件等。这
    时,就可以使用 MANIFEST.in 文件来指定要包含的其他文件。
include DrissionPage/configs/configs.ini
include DrissionPage/*.pyi
include DrissionPage/*/*.py
include DrissionPage/*/*.pyi
  • setup.py
# -*- coding:utf-8 -*-
from setuptools import setup, find_packageswith open("README.md", "r", encoding='utf-8') as fh:long_description = fh.read()setup(name="DrissionPage",version="3.2.31",author="g1879",author_email="g1879@qq.com",description="Python based web automation tool. It can control the browser and send and receive data packets.",long_description=long_description,long_description_content_type="text/markdown",license="BSD",keywords="DrissionPage",url="https://gitee.com/g1879/DrissionPage",include_package_data=True,packages=find_packages(),zip_safe=False,install_requires=['lxml','requests','cssselect','DownloadKit>=1.0.0','FlowViewer>=0.3.0','websocket-client','click','tldextract'],classifiers=["Programming Language :: Python :: 3.6","Development Status :: 4 - Beta","Topic :: Utilities","License :: OSI Approved :: BSD License",],python_requires='>=3.6',entry_points={'console_scripts': ['dp = DrissionPage.commons.cli:main',],},
)

字段说明:

  • version:这个简单,就是包的发布的版本,可以直接写在这,也可以从其他地方引用过来。

  • long_description:默认是rst(reStructuredText )格式的,也可以是其他格式,使用long_description_content_type字段指定,这个里面的内容是显示在pypi包首页上。

  • packages:申明你的包里面要包含的目录,比如 [‘mypackage’, ‘mypackage_test’] 可以是这种使用我的示例,让setuptools自动决定要包含哪些包

  • install_requires:申明依赖包,安装包时pip会自动安装

  • LICENSE

BSD 3-Clause LicenseCopyright (c) 2020, g1879
All rights reserved.Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:* Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimer.* Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.* Neither the name of the copyright holder nor the names of itscontributors may be used to endorse or promote products derived fromthis software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • README.md
项目简介,markdown格式

2. 打包上传

项目按照上述结构组织好之后,就可以进行打包了

  • check setup.py
python setup.py check

若没问题,无报错信息。

  • 生成打包文件
python setup.py bdist_wheel  # 编译生成wheel文件,会产生build,dist,XX.egg-info三个文件夹
pip wheel --wheel-dir=whl文件保存路径 setup.py文件所在路径  # 直接生成whl文件,不产生中间编译结果
python setup.py sdist # 生成tar包,即源码包
  • 上传生成的包
python setup.py sdist upload  # 上传source包
python setup.py bdist_wheel upload  # 上传二进制包
  • 包的安装
# 源码包安装,解压+编译+安装
python setup.py build
python setup.py install
# whl包
pip install XX.whl
  • 测试库是否可以正常安装
python setup.py develop
# 该方法不会真正的安装包,而是在系统环境中创建一个软链接指向包实际所在目录。
# 这边在修改包之后不用再安装就能生效,便于调试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“中国软件杯”飞桨赛道晋级决赛现场名单公布

“中国软件杯”大学生软件设计大赛是由国家工业和信息化部、教育部、江苏省人民政府共同主办,是全国软件行业规格最高、最具影响力的国家级一类赛事,为《全国普通高校竞赛排行榜》榜单内赛事。今年,组委会联合百度飞桨共同设立了“智能系统设…

C++11之后的C++标准特性宏定义方便功能特性测试

C是一个庞大的编程语言体系,它的高效性是可以直接连接硬件系统,它的灵活性是不断迭代完善的通用语义机制,当下C的发展演进可谓一路狂奔。不同应用中需要知道C对应的平台或者版本的功能特性,标准库信息、C编译器特性等,…

基于PHP的轻量级博客typecho

本文完成于 5 月中旬,发布时未在最新版本上验证; 什么是 typecho ? Typecho 是一款基于 PHP 的博客软件,旨在成为世界上最强大的博客引擎。Typecho 在 GNU 通用公共许可证 2.0 下发布。支持多种数据库,原生支持 Markdo…

24届近5年南京大学自动化考研院校分析

今天给大家带来的是南京大学控制考研分析 满满干货~还不快快点赞收藏 一、南京大学 学校简介 南京大学是一所历史悠久、声誉卓著的高等学府。其前身是创建于1902年的三江师范学堂,此后历经两江师范学堂、南京高等师范学校、国立东南大学、国立第四中…

JS 删除的是最后一页的最后一条,页码设置逻辑

删除的场景: 解决思路: 1、计算操作后的总页数 2、删除成功之后的总页数与当前总页数进行比较 3、如果删除成功之后的总页数比小于当前总页数,需要把当前页码减去1;否则,直接进行列表数据的请求 代码实现 /*总条数…

VBA 学习笔记1 对象以及属性

目录 1 取得VBA对象1.1 取得工作簿对象1.2 取得工作表对象1.3 取得单元格对象1.4 取得对象的属性1.5 文档的方法1 进入vba 界面 方式之一: 快捷键:ALTERF11 运行方式之一: 进入vba界面,点击绿色三角符号 1 取得VBA对象 1.1 取得…

DAY21

题目一 给定三个字符串str1、str2和aim, 如果aim包含且仅包含来自str1和str2的所有字符,而且在aim中属于str1的字符 之间保持原来在str1中的顺序,属于str2的字符之间保持原来在str2中的顺序,那么称aim是str1和str2的交错组成。实…

Springboot-Retrofit HTTP工具框架快速使用

在SpringBoot项目直接使用okhttp、httpClient或者RestTemplate发起HTTP请求,既繁琐又不方便统一管理。 因此,在这里推荐一个适用于SpringBoot项目的轻量级HTTP客户端框架retrofit-spring-boot-starter,使用非常简单方便,同时又提供…

约数个数(质因子分解)

思路: (1)由数论基本定理,任何一个正整数x都能写作,其中p1,p2..pk为x的质因子。 (2)由此可以推断,要求一个数约数的个数,注意到约数就是p1,p2...pk的一种组合&#xff…

日常BUG—— SpringBoot项目DEBUG模式启动慢、卡死。

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 我们调试程序时,需要使用DEBUG模式启动SpringBoot项目, 有时候会发…

convert Auto-Login (cwallet.sso) Wallet into a PKCS12 compliant Wallet

一步不行吗 &#xff1f; 1. If $JAVA_HOME is not set: a)For FMW 11g components associated with a WebLogic Domain or a FMW 12c Collocated OHS install run: $MIDDLEWARE_HOME/user_projects/domains/<domain>/bin/setDomainEnv.sh b) For FMW 11g Standalone…

侧滑置顶,取消置顶

第一步:布局 <?xml version"1.0" encoding"utf-8"?> <com.ddmh.magic.camera.ui.widget.SwipeMenuLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…

SQL | 使用通配符进行过滤

6-使用通配符进行过滤 6.1-LIKE操作符 前面介绍的所有操作符都是通过已知的值进行过滤&#xff0c;或者检查某个范围的值。但是如果我们想要查找产品名字中含有bag的数据&#xff0c;就不能使用前面那种过滤情况。 利用通配符&#xff0c;可以创建比较特定数据的搜索模式。 …

selenium 爬虫

selenium 可以动态爬取网页数据&#xff0c;就像真实用户操作浏览器一样&#xff0c;从终端用户的角度测试应用程序&#xff0c;WebDriver通过原生浏览器支持或者浏览器扩展直接控制浏览器 webdriver下载 因为selenuim对浏览器的版本存在兼容问题&#xff0c;顾需要针对指定浏…

SAP系统是什么呢?它有哪些优势?

SAP系统是全球知名的企业资源规划&#xff08;ERP&#xff09;解决方案供应商。它集成了财务、供应链管理、人力资源管理、销售和客户关系管理等多个功能模块&#xff0c;为企业提供全面、集成的管理体验。SAP系统已成为各行各业企业管理的智慧选择&#xff0c;极大地提升了管理…

c++ 有元

友元分为两部分内容 友元函数友元类 友元函数 问题&#xff1a;当我们尝试去重载operator<<&#xff0c;然后发现没办法将operator<<重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。…

如何在vue3中加入markdown语法

1、首先需要安装 md-editor-v3 yarn add md-editor-v3 或者是在vue图形化界面中直接搜索 md-editor-v3 进行安装。 2、引入该编辑页 引入可以参考这个&#xff0c;根据自己的需求进行修改和添加。 <template><md-editor v-model"text"/> </templat…

基于dbn+svr的交通流量预测,dbn详细原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN+SVR的交通流量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN+SVR用于交通流量预测…

二叉树题目:二叉树的直径

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树的直径 出处&#xff1a;543. 二叉树的直径 难度 3 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root&#xff0c;返回其直径…

考研408 | 【计算机网络】 传输层

导图 传输层的功能 传输层的两个协议 传输层的寻址与端口 UDP协议 UDP的主要特点 UDP首部格式&#xff1a; UDP校验&#xff1a; TCP协议 TCP协议的特点 TCP报文段首部格式 TCP连接管理 TCP的连接建立 SYN洪泛攻击 TCP的连接释放 TCP可靠传输 序号&#xff1a; 确认&#xff1…