一、注册一个pypi账号

https://pypi.org/

二、github上创建一个项目

https://github.com/

三、编写自己的python项目

项目结构(参考):https://github.com/gm19900510/licensetool

先建一个目录,比如magetool,这个里边放的是你的项目代码。在这个magetool目录里,新建一个__init__.py,这个文件里可以什么都不用写,然后就是你要发布的.py文件

四、编写setup.py

#!/usr/bin/env python
#-*- coding:utf-8 -*- #############################################
# File Name: setup.py
# Author: gm
# Mail: 1025304567@qq.com
# Created Time: 2019-04-11 15:37:04
############################################# from setuptools import setup, find_packages setup(
name = "licensetool",
version = "0.0.2",
keywords = ("pip", "license","licensetool", "tool", "gm"),
description = "设备指纹获取、license生成、指纹与有效期验证工具",
long_description = "设备指纹获取、license生成、指纹与有效期验证工具",
license = "MIT Licence", url = "https://github.com/gm19900510/licensetool",
author = "gm",
author_email = "1025304567@qq.com", packages = find_packages(),
include_package_data = True,
platforms = "any",
install_requires = ['chardet']
)

官方示例及说明

import setuptools

with open("README.md", "r") as fh:
long_description = fh.read() setuptools.setup(
name="example-pkg-your-username",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)

setup()接受几个参数。此示例包使用相对最小的集合:

  • name是包的分发名称。只要包含字母,数字_和 -。
  • version 是包版本看 PEP 440有关版本的更多详细信息。
  • author 和author_email用于识别包的作者。
  • description 是一个简短的,一句话的包的总结。
  • long_description是包的详细说明。这显示在Python Package Index的包详细信息包中。在这种情况下,加载长描述README.md是一种常见模式。
  • long_description_content_type告诉索引什么类型的标记用于长描述。在这种情况下,它是Markdown。
  • url是项目主页的URL。对于许多项目,这只是一个指向GitHub,GitLab,Bitbucket或类似代码托管服务的链接。
  • packages是应包含在分发包中的所有Python 导入包的列表。我们可以使用 自动发现所有包和子包,而不是手动列出每个包。在这种情况下,包列表将是example_pkg,因为它是唯一存在的包。find_packages()
  • classifiers告诉索引并点一些关于你的包的其他元数据。在这种情况下,该软件包仅与Python 3兼容,根据MIT许可证进行许可,并且与操作系统无关。您应始终至少包含您的软件包所使用的Python版本,软件包可用的许可证以及您的软件包将使用的操作系统。有关分类器的完整列表,请参阅 https://pypi.org/classifiers/。

MANIFEST.in文件

用于包含其他文件

具体格式和参数参考 https://docs.python.org/3.6/distutils/sourcedist.html

include licensetool/private.pem
include MANIFEST.in

五:打包自已的项目

在代码编写完成,自已测试后没有问题了,就可以打包了。 打包使用下边两个其中一个命令(我使用的是第二个):

python setup.py bdist_egg # 生成类似 edssdk-0.0.1-py2.7.egg,支持 easy_install

python setup.py sdist# 生成类似 edssdk-0.0.1.tar.gz,支持 pip

两个命令打包好之后都会生成build和dist两个目录,打包的文件会放在dist目录下,供后边上传到PyPi服务器

六:上传到PyPi服务器

安装twine

pip install twine

上传

twine upload dist/*

执行完这行指令之后,会提示输入pypi的用户名和密码,正常输入就可以

Python 自定义三方库的更多相关文章

  1. python常用三方库 - openpyxl

    目录 python常用三方库 - openpyxl 读取Excel文件 写入Excel文件 python常用三方库 - openpyxl openpyxl是一个第三方库, 可以处理xlsx格式的Exc ...

  2. python及第三方库交叉编译

    一.前言: 网上关于python的交叉编译的文章很多,但是关于python第三库的交叉编译的文章就比较少了,而且很多标题是第三方库的交叉编译,但是实际上用到的都是不需要交叉编译就能用的库,可参考性不强 ...

  3. Python常用三方库安装

    //首先更新pip python -m pip install --upgrade pip //一个类似Matlab的Plot绘制数据图的库. python -m pip install matplo ...

  4. python之三方库(冷门+热门)

    AES加密库 pycryptodome

  5. python下载三方库源地址修改

    临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 默认使用 windows系统使用cmd快速设置 pi ...

  6. 使用python三方库xlrd解析excel数据

    excel是平常用的比较多的一种数据格式,而在自动化测试过程中,解析其数据以供脚本使用就是一个重要的工作,幸好已有现存的三方库供使用,而不必重新造轮子. 一.安装xlrd模块 到python官网下载h ...

  7. 借助TZImagePickerController三方库理解自定义相册

    借助TZImagePickerController三方库理解自定义相册 1.整体架构分析 整体框架大致可以分为几个部分 <1>工具类-TZImageManager:这个类主要是工作是提供一 ...

  8. Python浅谈requests三方库

    requests 三方库用于获取URL资源 1.GET请求访问一个页面 import requests r = requests.get('https://www.cnblogs.com/xqxacm ...

  9. python 三方库

    ---------------- 这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护.内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理. ...

随机推荐

  1. JS深度判断两个数组对象字段相同

    /** * 判断此对象是否是Object类型 * @param {Object} obj */ function isObject(obj){ return Object.prototype.toSt ...

  2. 实现Runable接口

    步骤 定义一个实现Runable接口的类,在类中实现run()方法(线程执行事件的方法).创建一个上述类的对象:Thread t=new Thread(new MyThreadt.start());调 ...

  3. nginx中lua主动设置Content-Length

    最近发现lua调用ngx.say和ngx.print 默认返回的HTTP头是trunk模式的,通常情况下是很好的,没有什么问题:但是要提供给其他人回源的时候就有问题了,特别是我要给slice模块回源, ...

  4. leetcode-easy-array-48. Rotate Image-NO

    mycode 思路:第m行要变到 - 1- m 列 ,但是没有再想一步即列变为行,这样每一个位置的变换方式就出来了 难点:如何不使用额外空间呢? 参考: 思路:找到矩阵旋转和转置之间的联系,转置是可以 ...

  5. Java -- 泛型父类中获取子类的泛型T

    原文:https://blog.csdn.net/u014723529/article/details/70574026 /** * 获取实体类型名称 * 子类可覆盖此方法,返回:泛型T的类名.cla ...

  6. 使用cesium中的scene.open中遇到的几个问题

    有些服务是发在场景(scene)下的,超图提供了一个很方便的方法:scene.open,这个方法会将场景中所有的图层(无论是OSGB还是影像和地形)加载进来.同时这个方法会自带一个自动地位功能,具体实 ...

  7. shell基础命令

    什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, AS ...

  8. 【web前端】前段时间的面题整理(1)

    这是我的试题答案整理,可能有多种答案.我也就写了一两种.在慢慢整合中 第一题 用js实现随机选取10-100之间的10个数字,存入一个数组,去重后求和(保证这10个数字不能出现重复) 要求:去重不能使 ...

  9. IDEA无法导入HttpServlet包解决方法

    1.maven项目 直接在pom.xml中添加对java servlet api的依赖即可,比较常用的一个servlet版本3.1.0的依赖如下: <!-- https://mvnreposit ...

  10. tensorflow学习之tf.assign

    tf.assign(ref, value, validate_shape=None, use_locking=None, name=None), 函数功能是将value赋值给ref ref必须是tf. ...