准备工作

1.创建一个项目文件夹

mkdir dada_openapi_python
cd dada_openapi_python

2.创建包文件夹

在里面在创建一个 dada_openapi_client 的文件夹,这个文件夹的名称我故意创建的和上层目录不一样,以免误会,这个文件夹其实就是包名称了

mkdir dada_openapi_client
cd dada_openapi_client

3.编写包代码

根据各自的业务场景来,我下面列举一个我编写的

dada_client

制作PyPI包

现在项目逻辑已经完成,那么开始做 PyPI 的包了

1.创建setup.py文件

dada_openapi_python文件夹中,创建配置文件setup.py,并填写配置,下面贴出我的配置

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/1/6 15:41
# @Author : Weiqiang.long
# @Site :
# @File : setup.py
# @Software: PyCharm
# @Description: import setuptools with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read() setuptools.setup(
name = "dada_openapi_client",
version = "1.0.3",
author = "Weiqiang.long",
description = "达达签名数据封装",
long_description = long_description,
long_description_content_type="text/markdown",
url = "https://github.com/longweiqiang/dada_openapi_python",
packages = setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
] )

上面配置中的每个字段具体含义,可参照官网文档的2.8项说明

打包

dada_openapi_python文件夹运行此命令

python setup.py sdist bdist_wheel

上传

python -m twine upload dist/*
  • 成功上传如下:
Uploading distributions to https://upload.pypi.org/legacy/
Uploading dada_openapi_client-1.0.3-py3-none-any.whl
100%|████████████████████████████████████████████████████
███████████████| 7.88k/7.88k [00:00<00:00, 10.6kB/s]
Uploading dada_openapi_client-1.0.3.tar.gz
100%|████████████████████████████████████████████████████
███████████████| 6.23k/6.23k [00:01<00:00, 4.43kB/s]

可能遇到的问题

Upload failed (403): Invalid or non-existent authentication information.

错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc

创建用户验证文件 ~/.pypirc

在自己的用户目录下新建一个空白文件命名为.pypirc,内容如下:

[distutils]index-servers=pypi

[pypi]repository = https://upload.pypi.org/legacy/
username = XXX
password = XXX

Upload failed (403): You are not allowed to edit 'xxx' package information

你需要先注册你的包才可以开始上传

Server response (401): Incomplete registration; check your email

你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。

Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"

你的setup.py文件中的classifier信息有误,请按官网的正确分类书写classifier.

error: No dist file created in earlier command

你还没打包就开始了上传命令

Upload failed (400): File already exists

文件已经存在了,你每一次上次都应该更新版本号。

参考文档:

https://packaging.python.org/tutorials/packaging-projects/

https://segmentfault.com/a/1190000008663126

http://xiaoh.me/2015/12/11/python-egg/

记录第一次制作pypi包的过程的更多相关文章

  1. 记录使用 Cake 进行构建并制作 nuget 包

    书接上一回(https://www.cnblogs.com/h82258652/p/4898983.html)?[手动狗头] 前段时间折腾了一下,总算是把我自己的图片缓存控件(https://gith ...

  2. 手动制作rpm包

    制作RPM包的过程,简单的说,就是为制作过程提供一个“工作车间”,即一个目录,里面需要包含以下几个子目录: BUILD        ————编译相关源码包时的工作目录: RPMS         — ...

  3. 一步步制作RPM包

    一步步制作RPM包 来源 http://blog.51cto.com/laoguang/1103628 一.RPM制作步骤 我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根 ...

  4. 第一部分:使用iReport制作报表的详细过程(Windows环境下)

    提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细 ...

  5. ubuntu 制作deb 包

    ubuntu下打包制作deb安装包 http://www.th7.cn/system/lin/201406/61012.shtml   2014-06-22 20:16:45CSDN-yangbing ...

  6. dpkg制作deb包

    deb包的文件结构: deb包里面的结构:DEBIAN目录 和 软件具体安装目录(模拟安装目录)(如etc, usr, opt, tmp等). 在DEBIAN目录中至少有control文件,还可能有p ...

  7. Ubuntu下制作deb包的方法详解

    1  认识deb包 1.1   认识deb包 deb是Unix系统(其实主要是Linux)下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组. 由于 Unix ...

  8. 制作自己的rpm包,并为其制作patch包。

    本文分为两个部分,第一部分是制作一个简单的自己的rpm包,并安装运行它.第二部分是为其制作一个patch包,并通过spec配置文件去打补丁,安装.运行打补丁后的程序. 一.安装工具 [yh@local ...

  9. 制作rpm包步骤

    由于项目需要,需要自行制作rpm包.比较全面的可以参考如下链接: http://blog.chinaunix.net/uid-23069658-id-3944462.html 大致框架如下: 1,安装 ...

随机推荐

  1. 三 传递包装pojo&ResultMap

    传递包装pojo: 将实体类对象封装在QueryVo类中进行操作 mapper接口: mapper映射文件: 测试: ResultMap的使用: type:映射成的pojo类型 id:resultMa ...

  2. (5)LoraWAN:Join procedure、Receive Windows

    网络在建立之初,终端设备启动后需要向服务端发起Jion请求(接入请求),只有在接入请求得到成功答复,并根据答复配置相关参数后,终端才算成功加入网络.Jion成功后才能进行数据的上行.下行通信. Jio ...

  3. 在vnware中配置好redis后,不能使用图形化工具打开

    1.先检查防火墙的状态 通过systemctl status firewalld查看firewalld状态,发现当前是dead状态,即防火墙未开启 通过systemctl start firewall ...

  4. Day3-A-Problem H. Monster Hunter HDU6326

    Little Q is fighting against scary monsters in the game ``Monster Hunter''. The battlefield consists ...

  5. spring事务传播属性和隔离级别

    猫咪咪的Java世界 spring事务传播属性和隔离级别 博客分类: Spring java编程   1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Supp ...

  6. 对于文章的字母、单词、短语,(无用词表)的检索Java代码实现

    日期:2019.5.9 博客期:073 星期四 今天软件工程课上,又做了测试,老师说我们的速度太慢了,实际上我也觉得自己很慢.老师说了这是我们的上一届的大二上半学期学习中的速度,所以呢?意思就是说我们 ...

  7. js求两个整数的百分比

    function GetPercent(num, total) {                          num = parseFloat(num);                   ...

  8. OBU设备非接触式读卡方案:SI522

    传统收费站将成历史!全部转为ETC系统 当高速人工收费已经成为我们驾驶出行的习惯后,我们发现,高速人工收费带来低效率.长等待以及落后性等缺点逐渐给人们出行带来不便.伴随着我国汽车保有量的逐年递增,高速 ...

  9. elasticsearch-java客户端测试

    1.环境准备 (1)添加依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifa ...

  10. 页面的html调试

    点击页面按下键盘的F12,或者鼠标右键选择检查(N) 会弹出一个窗口,这个窗口就是调试窗口 如上图所示,第一个图标是标签元素选择器,点击使用后,在页面上移动,会在Elements的区域找到你鼠标选中的 ...