python如何发布自已pip项目的方法步骤


Posted in Python onOctober 09, 2018

前言

因为自已平时会把一个常用到逻辑写成一个工具python脚本,像关于时间字符串处理,像关于路径和文件夹遍历什么的工具。每一次新建一个项目的时候都要把这些工具程序复制到每个项目中,换一个电脑后还要从github生新下载后再复制到项目中,实在太麻烦。最后想想,还是建一个自已的pip项目会比较好。

环境准备

要用 pip 发布 python 程序,首先当然是要安装 Python 和 pip 这两个软件了,以 Ubuntu 16.04 为例:

$ sudo apt update 
$ sudo apt install -y python python-pip

CentOS 和 RedHat 因为 RPM 体系需要依赖于 python,更是默认就安装好了。

另外发布 Pypi,还需要安装一个发布工具, twine ,以及其所依赖的 setuptools、wheel:

$ sudo pip install --upgrade twine setuptools wheel

好,到这环境就已经就绪了。

第一步:注册一个PyPi帐号

 PyPi注册网站

在上边的注册网站上注册一个自已的帐号,注册好后在邮箱激活,一般注册流程都是这么操作了,这里就不多说了。

第二步:在github上创建一个项目

如果你还没有使用过github源码托管网站,可以先注册一个github的帐户再创建项目,我一般创建项目用的是官网提供的桌面工具Github Desktop.

Github Desktop的下载地址:https://desktop.github.com

github注册和创建新项目,这里也不说了,程序员的基本功。

第三步:编写自已的python项目

我这里只有一个timetool.py和pathtool.py两个文件

详情可以查看我的示例项目: https://github.com/fengmm521/pipProject

先建一个目录,比如magetool,这个里边放的是你的项目代码

在这个magetool目录里,新建一个__init__.py,这个文件里可以什么都不用写,然后就是你要发布的.py文件

第四步:编写setup.py文件

这里重点说明一下这个setup.py文件,因为整个pip项目的发布和上传都是基于这个setup.py文件完成的。

大家可以看一下我示例项目的setup.py是怎么写的,其实我也是从网上下载别人写好的。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#############################################
# File Name: setup.py
# Author: mage
# Mail: mage@woodcol.com
# Created Time: 2018-1-23 19:17:34
#############################################


from setuptools import setup, find_packages

setup(
  name = "magetool",
  version = "0.1.0",
  keywords = ("pip", "pathtool","timetool", "magetool", "mage"),
  description = "time and path tool",
  long_description = "time and path tool",
  license = "MIT Licence",

  url = "https://github.com/fengmm521/pipProject",
  author = "mage",
  author_email = "mage@woodcol.com",

  packages = find_packages(),
  include_package_data = True,
  platforms = "any",
  install_requires = []
)

setup.py中重要的参数有5个:

1.name

name = “magetool”,这个name参数后边的就是你的项目代码所在目录,也是你pip要上传的项目名称,其他人用pip install xxx来安装时,后边的xxx就是你的这个magetool

2.version

version = “0.1.0”,你工具的版本号,后期你工具更新了,要用pip来更新包的时候,会更新比当前版本号高的新版本。

下边是pip 更新包的命令

pip install --upgrade <包的名字>
pip install -U <包的名字>12

3.packages

packages = find_packages(),这个参数是导入目录下的所有__init__.py包

4.install_requires

install_requires = [],这是一个数组,里边包含的是咱的pip项目引用到的第三方库,如果你的项目有用到第三方库,要在这里添上第三方库的包名,如果用的第三方版本不是最新版本,还要有版本号。

第五步:打包自已的项目

在代码编写完成,自已测试后没有问题了,就可以打包了。

打包使用下边两个命令:

我使用的是第二个

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

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

第六步:上传到PyPi服务器

在上传前,要建一个文件,$HOME/.pypirc,$HOME目录在linux或者mac系统下就是~/目录。在这里建一个.pypirc文件。里边的内容如下:

[distutils]
index-servers = pypi

[pypi]
username:你的PyPi用户名
password:你的PyPi密码
~

因为不能使用python setup.py register进行上传,使用这个上传会报一个410的错误。所以要使用.pypirc文件保存你的PyPi用户信息,这时使用下载的twine就可以直接上传了。

在别的地方找到的有说上传用python setup.py sdist upload命令,但在我这里用这个命令也会一直失败,所以我用下边的命令上传打包好的pip项目,我上传的是用第五步的,python setup.py sdist命令打包好的项目,

上传好打包的pip安装包:

twine upload dist/magetool-0.1.0.tar.gz1

第七步:使用pip安装刚刚上传的包

pip安装包我这里就不多说了,这个一般用python的都会的

用pip安装上传的包:

pip install magetool --user

?user参数的意思是安装给当电脑的当前用户,要不然会要求系统管理员权限才能安装。加了?user之后就不用sudo的管理员权限了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python读取mp3中ID3信息的方法
Mar 05 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
Django csrf 验证问题的实现
Oct 09 #Python
Python正则表达式指南 推荐
Oct 09 #Python
详解Django的CSRF认证实现
Oct 09 #Python
浅析python中的迭代与迭代对象
Oct 08 #Python
实例讲解python中的序列化知识点
Oct 08 #Python
实例讲解python中的协程
Oct 08 #Python
详解python分布式进程
Oct 08 #Python
You might like
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
javascript date格式化示例
2013/09/25 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
Form表单及django的form表单的补充
2019/07/25 Python
python 实现list或string按指定分段
2019/12/25 Python
如何用Python 加密文件
2020/09/10 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
平面设计专业求职信
2014/08/09 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js