经常会碰到python包要打包成sdk放到PyPi上开源的情况。

说明:
在下面准备前,还需要在pypi网站上注册账户。否则无法上传到pypi网站上。
另外,我还准备了github的账户,当然什么公钥也生成了,在github上保存好,便于git操作,这里不表。

一、准备
1、setup.py文件,这个不详述,到处都有介绍。
setup.py文件是打包发布的关键性文件之一。具体可以参考:

https://docs.python.org/3.8/distutils/setupscript.html#installing-additional-files

里面内容详细,是权威的资料。

其中,我个人setup.py文件如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import os
from setuptools import setup, find_packagesMAJOR =1
MINOR =0
PATCH =0
VERSION = f"{MAJOR}.{MINOR}.{PATCH}"def get_install_requires():reqs = ['pandas>=0.18.0','requests>=2.0.0','toml>=0.10' ,'pyzstd >=0.15','numpy>=1.9.2']return reqs
setup(name = "dbpystream",version = VERSION,author ="songroom",author_email = "rustroom@163.com",long_description_content_type="text/markdown",url = 'https://github.com/songroom2016/dbpystream.git',long_description = open('README.md',encoding="utf-8").read(),python_requires=">=3.6",install_requires=get_install_requires(),packages = find_packages(),license = 'Apache',classifiers = ['License :: OSI Approved :: Apache Software License','Natural Language :: English','Operating System :: OS Independent','Programming Language :: Python',       'Programming Language :: Python :: 3.6','Topic :: Software Development :: Libraries :: Python Modules',],package_data={'': ['*.csv', '*.txt','.toml']}, #这个很重要include_package_data=True #也选上)

重点是,要对setup.py进行检查,以确认模块是否语法正确。

$ python3 setup.py check

如下:

D:\py_projects\dbpystream\> python  setup.py checkrunning check

表明setup.py语法检查通过。

需要提醒的是,如果你的包里,需要读出原目录中相关的.txt,csv,toml等格式文件,这个你要记得带上。否则,打包的时侯,不会为这个进行打包。会自动忽略,当你pip后,你就会发现报错,少了这个文件。

2、LICENSE,格式内容

通常用这个:

Copyright (c) 2018 The Python Packaging AuthorityPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE

3、README.md
这个自己整一下即可以。这个是markdown格式

5、.gitignore
整一个,这个不是必须的。是上传github上要得到的,清爽一点。

__pycache__/
*workspace
*.py[cod]
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
htmlcov/
.tox/
.nox/
.hypothesis/
.pytest_cache/
*.egg-info/
.vscode/
.*.swp
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
junit*.xml
*.cover
MANIFEST
.installed.cfg
*.egg
*.manifest
*.spec
*.log
*.con
*.out
env.sh
*-env.sh

二、打包、上传

说明,下面命令中python3,如果有python软链接到python3的,直接可以用python,不需要用python3.具体大家看情况。就不作特别说明了。

1、安装好打包 工具

python3 -m pip install --user --upgrade setuptools wheel

2、在指定的目录下,进行打包;打包后会生成两个文件

python3 setup.py sdist bdist_wheel

会生成几个文件夹,build,dist,.egg-info等。

3、上 传pypi
(1)安装上传工具

python3 -m pip install --user --upgrade twine

(2)上传pypi
有些可以试一下:

 py- m twine upload dist/*

 twine upload dist/*

三、各种坑

1、pip升级问题

ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: 'c:\\python310\\lib\\site-packages\\pip-21.2.3.dist-info\\entry_points.txt'
Consider using the `--user` option or check the permissions.

报错信息中推荐使用 --user 命令,

C:\Python310\python.exe -m pip install --user  --upgrade pip

后面解决。

PS D:\dbpystream> pip -V
pip 22.3.1 from C:\Users\****\AppData\Roaming\Python\Python310\site-packages\pip (python 3.10)

成功升级。

2、pip install 后找不到module问题

重点应放在,在没有上传pypi前,比如test.py是否正常(强烈建议test.py应放在\test文件夹下)。也就是说,如果在没有上传前,就存在找不到module的情况,上传后,虽然已经下载成功,但仍会报“找不到module”的错误。

建议:
(1)、先检查代码是否正常。在上传前,看看程序是不是正常,module是否正常,比如,

__init__.py #是否在文件夹中,起到module的作用。

(2)、先找样包练下手。从github上找一个实例,看看别人封装的代码,自已走一下,有什么问题。如果正常,再打包自己的库到pypi,这样可以少踩一些坑。

3、pip install后,找不到相应的捆绑资源文件(csv,txt,toml等)

这种情况是,pip install没问题,但是运行时会出现一些问题:
比如,

Exception: toml_file :C:\Users\aaaa\AppData\Roaming\Python\Python310\site-packages\dbpystream\method.toml
does not exist!

强烈建议,不要在module中增加在指定的地址下读取相应与module捆绑的资源性文件(csv,txt,toml),因为打包后,module的地址已经被改变了,并不是原来的module显现结构,并不能按原来的目录下读取相应的文件。

经历的坑:原来在module中用method.toml文件配置了一些信息,便于函数读取。但是配置了各种参数后,仍不起作用,后面只能放弃。后改用method.py的方式,把相关的配置信息从toml格式,改成了dict格式。
替换后,这个仍在原来的目录下,这样比较方便。

4、不能上传问题

除密码和账户原因外,你需要注意:

这个在刚玩的时侯会碰到。你不能覆盖性上传一个文件,因为pypi不认相同的版本号的包重复上传。你只能把version版本号往上加。

比如,原来是0.1.0的,改成0.1.1,再次上传就OK了。

四、验证

pip install XXXX

除检查下载是否顺利外;同时,打开python IDE,看一下运行是否正常。

import XXXX

如果各正功能如预期,证明验证OK.

Python: 打包发布到PyPi及踩坑经历相关推荐

  1. 发布开源库的踩坑经历:jitpack.io

    前言 很多小伙伴自己写了一个库,打算开源出来,但是直接给别人发jar包或者aar包,别人使用都很不方便,而且版本更新也不方便,所以很多小伙伴把开源库放到了远程仓库里(如maven或jcenter),但 ...

  2. python打包发布pypi及更新流程

    参考文档 Python 快速打包发布软件PyPi上 包含setup.py的非Python文件 五步法更新pypi包体 发布 1. 安装打包依赖工具 pip install setuptools 2. ...

  3. 记一次成功把Vue2后台项目改造成Vite2的踩坑经历

    文章目录 前言 一.项目背景 1.1.为什么要选择Vite 二.迁移前的准备 2.1.补全.vue后缀 2.2.移动public/index.html的位置 2.2.1.通过vite-plugin-h ...

  4. yolov5-4.0环境搭建,零基础小白都能看得懂的教程。YOLOv5搭建的最快搭建方式,踩坑经历详谈)yolov5/yolov4/yolov3/yolov3通>>>>>>>>>>>>>>>>>第一章

    第一章:python最新YOLOv5-4.0环境搭建,零基础小白都能看得懂的教程.YOLOv5搭建的最快搭建方式,踩坑经历详谈 环境准备: yolov5-4.0环境搭建整体说明 2,anaconda的 ...

  5. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  6. GPCC安装以及踩坑经历

    gpcc安装以及踩坑经历 官方下载地址文档 https://network.pivotal.io/products/pivotal-gpdb#/releases/29190 安装开始之前 chown ...

  7. 一次kvm嵌套虚拟化踩坑经历

    女主宣言 嵌套虚拟化就是虚拟化环境里再次进行虚拟化,简单的说就是虚拟机里运行虚拟机,听起来有点递归的感觉.那是不是可以无限嵌套下去呢?递归有终结条件,否则无限递归下去资源耗尽,嵌套虚拟化嵌套层次越深复 ...

  8. springCloud项目不能向EurekaServer 注册多个EurekaClient时(端口不一致)方法及踩坑经历

    spring cloud 问题说明:springCloud项目不能向EurekaServer 注册多个EurekaClient时(端口不一致)方法及踩坑经历: 前提--->已经能够通过Eurek ...

  9. uniapp 引入阿里矢量图标库的详细步骤及踩坑经历

    uniapp 引入阿里矢量图标库的详细步骤及踩坑经历 首先在阿里矢量图标库选择自己喜欢的图标 加购物车如下图 点击右上角的购物车 添加到项目 这里有坑 首先你不选中在线链接 你是看不到 @font-f ...

最新文章

  1. 【大数据学习】数学基础及应用
  2. mac环境下安装Gradle及配置
  3. js 控制展开折叠 div html dom
  4. php+sql创建本地项目详细步骤1——创建数据库数据表,数据库连接
  5. android输入法源码分析,基于Android的输入法的设计与实现.doc
  6. CodeForces - 1066B Heaters(贪心)
  7. Node.js 博客实例(三)添加文件上传功能
  8. 最有效的创建大数据模型的6个技巧
  9. WORD如何将多文档快速汇总到一份WORD文件里面?
  10. 95-140-118-源码-transform-算子connect
  11. 2009年云计算将引发一场黑客攻击高潮
  12. 数据窗口dw导出多种格式文件
  13. 【心理咨询师考试笔记】基础理论(四)——发展心理学
  14. 维持两人爱情关系需要慢慢做的事情
  15. PCL代码学习03-kdtree_search
  16. Linux计划任务篇
  17. JAVA简单手写数字识别
  18. java 邮件 已读回执_java – 在Firebase群组消息传递应用中实施已读回执功能
  19. 鸿蒙大战是什么,混沌氏(浑沌)、鸿蒙氏,盘古开天辟地时两个最强大的部落首领?...
  20. html 文本框css设置边框圆角

热门文章

  1. [C语言编程练习][06]输入身高(英寸),以厘米为单位输出。
  2. 【我的第一本算法书】笔记
  3. 如何满足从Jama需求到测试和代码的可追溯性?
  4. 公众号涨粉的3大技巧
  5. 3分钟学会Excel“自主学习”
  6. 扣绩效工资,违反劳动法吗?
  7. 没有人能随随便便成功,十年磨一剑
  8. Windows重启,自动重启Nginx,JAVA,VueSSR服务
  9. SpringMVC系列之基本配置
  10. centos7搭建私人云盘