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 相关文章推荐
Python程序员面试题 你必须提前准备!
Jan 16 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
如何利用Python 进行边缘检测
Oct 14 Python
详解anaconda安装步骤
Nov 23 Python
Django搭建项目实战与避坑细节详解
Dec 06 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
php 检查电子邮件函数(自写)
2014/01/16 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
js设置默认时间跨度过程详解
2019/07/17 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
大学生军训广播稿
2014/01/24 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
嘉宾邀请函
2015/01/31 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android