2018年7月份,python上传自己的包库到pypi官网的方法

最近pypi官网进行了更新,老的上传网址作废了。记录下上传到pypi的方法

0、去pypi官网注册账号,没账号是不可能上传的,想想也是那不乱套了吗,注册后会收到一个邮件需要点击然后重新登录 

 

 1、目录就是这样 ,我要上传mulitiprocessing_log_manager这个包到官网。

 

2、其中有两个mulitiprocessing_log_manager文件夹,最外层的叫什么都无所谓啦。但要确保setup.py和内层的这个是同级的,别搞成把setup.py放到包文件夹里面去了。

 

 

3、build dist 和multiprocessing_log_manager.egg-info 文件夹 是打包生成的,所以一共就有mulitiprocessing_log_manager这个包文件夹 和MANIFEST.in文件 README.md文件 setup.py文件。

 

4、README文件是可以显示到官网中的说明的。但前提是必须要setup中引用它的内容才能生效,同理叫什么名字什么后缀的也都无所谓 了。

 

5、setup文件夹如下,这个文件是最主要的。

# coding=utf-8from setuptools import setup, find_packageswith open("README.md", "r") as fh:  这里就是读取readme文件的内容了。long_description = fh.read()setup(name='multiprocessing_log_manager',  # '库的名称,一般写成文件夹的名字就可以了,也有的人不写成文件夹的名字,那么pip install和具体的import使用时候就不一样了,用起来会十分蛋疼,有一些包就是这样的。比如一个包,安装时候是pip install  xxx,但当你要使用时候要import yyy

version="0.1.2", # 版本,每次发版本都不能重复,每次发版必须改这个地方description=('Multi-process secure logs both in linux and windows' # 一个简介,别人搜索包时候,这个概要信息会显示在在搜索列表中
),long_description=open('README.md', 'r').read(), # 这是详细的,一般是交别人怎么用,很多包没写,那么在官网就造成没有使用介绍了long_description_content_type="text/markdown",author='bfzs', # 作者author_email='909686719@qq.com',maintainer='ydf', # 主要的工作人员maintainer_email='909686719@qq.com',license='BSD License',# packages=['douban'], # 发布的包名packages=find_packages(),platforms=["all"],url='https://baike.baidu.com/item/%E9%82%93%E4%B8%BD%E5%90%9B/27007?fr=aladdin', # 这个是连接,一般写github就可以了,会从pypi跳转到这里去classifiers=['Development Status :: 4 - Beta','Operating System :: OS Independent','Intended Audience :: Developers','License :: OSI Approved :: BSD License','Programming Language :: Python','Programming Language :: Python :: Implementation','Programming Language :: Python :: 2','Programming Language :: Python :: 2.7','Programming Language :: Python :: 3','Programming Language :: Python :: 3.4','Programming Language :: Python :: 3.5','Programming Language :: Python :: 3.6','Topic :: Software Development :: Libraries'],install_requires=[ # 这里是依赖列表,表示运行这个包的运行某些功能还需要你安装其他的包'pymongo',] )

 

6、最重要的是别忘了这个文件

 一定不要忘了写一个MANiFEST.in文件,并且包含README.md这个文件,否则自己能在本地直接安装这个包,但使用pip 安装时候就会报错找不到这个文件了,因为默认不会上传readme这个文件的,只会上传包里面的内容。除非你在setup文件中没有写引用到readme这个文件的内容,pip安装那就不会出错了。MANiFEST.in这个文件名称是固定的,必须是这个名字。

pip安装三方包时候,这个错误相当普遍 ,很多三方包pip 安装 时候 报错FileNotFoundError: [Errno 2] No such file or directory: 'README.md',就是这个原因造成。

 

 

 

我的readme文件,

 

 

7、打包上传

python setup.py check     # 可以先做一些检查
python setup.py sdist upload -r pypi          # 打包注册(注册指的是注册你要上传的库的包名,不要理解成注册pypi账号了)上传一条龙了。运行完这条命令后就能在官网个人中心看到自己的包了,要全网能搜自己刚才上传注册的包需要在上传后20分钟以后才行。

 

在上传之前,你自己也可以,使用python setup.py 来安装,然后测试一下主要方法,确认没问题了再上传注册这个包也不迟。其中一些问题比如会是  相对导入问题,你在pycharm的项目直接一级文件夹下建的文件夹,有自动把项目顶层添加到环境变量到sys.path,但离开pycahrm就没了这个环境变量,所以如果你不精通相对导入这些的知识点的话,就需要自己用setup.py安装后测试运行一下。

 

8、 然后就可以pip install 命令安装自己刚才上传的包啦,不一定能很及时的安装,可能需要上传3分钟后才能下载最新版本。如果你是设置了全局用阿里 或者豆瓣 清华什么的加速镜像,那就要等更久了。因为阿里是每10分钟才同步更新一次 pypi官网的。

如果全局设置了使用其他加速,也可以在安装时候指定源   pip install -i https://pypi.org/simple/ multiprocessing_log_manager   。比如 这样就强制使用官方源了,不管你是否设置了全局 阿里 豆瓣什么的。

 

9、在第七步中上传时候会 提醒你 输入账号 密码的,还是有点烦人,可以在全局中设置。

具体是如果是linux ,在当前用户新建这个文件  ~/.pypirc

如果是windows,在C:\Users\Administrator创建 .pypirc. 文件,注意是前后各有一个点,不然在win下 创建不了这个文件。具体的C:\Users\Administrator取决于你在什么盘 的什么用户下。

 .pypirc文件中写入内容为:

 

[distutils]
index-servers = pypi

[pypi]
username:ydf0509      用户名
password:12345xxxx     密码

 

有了这个文件,以后每次上传包都不需要输入账号密码了。

 

10、总结下,这是上传的第一个包,还不错,网上说的方法很多过时的,也不详细,加上最近pypi官网换域名了,老方法不行。

可以更加了解了三方包到底是怎么一回事和安装时候为什么会出错呢,自己上传过就能更加知道经常有三方包安装出错的原因。

之前要用一个包就要把它复制到各个项目去,有点麻烦。添加本地文件夹到环境变量虽然能解决到处复制,如果忘了更改测试和生产环境,或者忘了添加到那些地方去,也会悲剧了。把pypi官网当作一个包的中转站也挺不错的,在家 在公司 在各个不同项目 在各个环境都能方便使用。

目前是setup里面各个参数目的都达到了,唯一是详细说明的markdown格式在网页中没有显示正确的字体大小,需要看下原因。

 

 

官方参考地址

https://packaging.python.org/tutorials/packaging-projects/#uploading-your-project-to-pypi,和我这篇很多不一样。

 

 

个人中心截图

 

 

pypi官网显示的项目截图

 

 

 

大家可以安装这个包 pip install mulitiprocessing_log_manager,是一个带有彩色控制台handler和mongodb handler以及win和linux都多进程安全切片的roatatingfilehandler,用法十分简单,只有两个方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统C语言学习总结

引言   尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能。   本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的。希望对您的学习和工作有…

redis 删除操作

Redis 键(key) Redis 键命令用于管理 redis 的键。 语法 Redis 键命令的基本语法如下: redis 127.0.0.1:6379> COMMAND KEY_NAME 实例 redis 127.0.0.1:6379> SET runoobkey redis OK redis 127.0.0.1:6379> DEL runoobkey (integer) 1 在以上实例中 DEL 是…

写给大数据开发初学者的话2

见 : http://lxw1234.com/archives/2016/11/782.htm 如果你已经按照《写给大数据开发初学者的话》中第一章和第二章的流程认真完整的走了一遍,那么你应该已经具备以下技能和知识点: 0和Hadoop2.0的区别;MapReduce的原理(还是那个…

Pandas的结构和应用

Pandas处理以下三个数据结构 - 系列(Series)----一维ndarray   特点:带有标签,可以使用标签作为索引,大小不能改变,内部数据可以改变。 属性:与NumPy类似,多了一个轴标签axis lables 数据…

JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

题目 Description “那么真的有果尔德施坦因这样一个人?”他问道。 “是啊,有这样一个人,他还活着。至于在哪里,我就不知道了。” “那么那个密谋——那个组织?这是真的吗?不是秘密警察的捏造吧?” “不是,这是真的。我们管…

python 中如何判断list中是否包含某个元素

在python中可以通过in和not in关键字来判读一个list中是否包含一个元素 theList [‘a’,’b’,’c’] if ‘a’ in theList: print ‘a in the list’ if ‘d’ not in theList: print ‘d is not in the list’

时间即财富:创业者浪费精力的八个错误

导读:本文作者Jeff Miller是美食网页应用Punchfork的创始人,同时也是DuckDuckGo、Ginzametrics、Art.sy、DataMinr以及Forkly的投资人。作者通过对自己创业初期一些错误选择进行盘点,告诉读者在创业初期应该学会选择,因为在创业初…

写给大数据开发初学者的话3

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 如果你已经按照《写给大数据开发初学者的话2》中第三章和第四章的流程认真完整的走了一遍,那么你应该已经具备以下技能和知识…

十五周二次课

18.6 负载均衡集群介绍 主流开源软件LVS、keepalived、haproxy、nginx等其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用keepalived的负载均衡功能其实就是lvslvs这种4层的负…

LeetCode--171--Excel表列序号

问题描述: 给定一个Excel表格中的列名称,返回其相应的列序号。 例如, A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...示例 1: 输入: "A" 输出: 1示例 2: 输入: "AB" 输出: 28示例 3: 输入: "…

中国历代王朝大排名

中国自秦以降,一共出过九个大王朝,它们是:秦、汉、晋、隋、唐、宋、元、明、清。另外,还出过五十几个小王朝,它们是: 三国时的魏、蜀、吴,共三个; [ 转自铁血社区 http://bbs.tiexue…

写给大数据开发初学者的话4

见:http://lxw1234.com/archives/2016/11/795.htm 如果你已经按照《写给大数据开发初学者的话3》中第五章和第六章的流程认真完整的走了一遍,那么你应该已经具备以下技能和知识点: 为什么Spark比MapReduce快。使用SparkSQL代替Hive&#xff…

TPS及计算方法

TPS (transaction per second)代表每秒执行的事务数量,可基于测试周期内完成的事务数量计算得出。例如,用户每分钟执行6个事务,TPS为6 / 60s 0.10 TPS。同时我们会知道事务的响应时间(或节拍),以此例,60秒完成6个事务…

域名解析服务之DNS查询类型

在实际应用中DNS查询主要分为两种方式查询:1.递归查询;2.迭代查询 一般情况下:为了减少资源的消耗,网络中客户端与所属的本地DNS服务器查询方式通常为递归查询,本地DNS服务器与外部的公共DNS服务器间的查询方式为迭代查…

MFC Ribbon界面设计

Ribbon是类似于office2007样式的界面,它替代了传统的MFC程序里的菜单和工具栏 MFC默认生成的Ribbon功能少,需要我们自己添加一些控件和图片等元素使界面好看 看下面的一个界面,是VC2010示例里的 看到它与默认Ribbon样式的区别: 工…

互联网手机躁动:“周大炮”追逐“雷布斯”

摘要:周鸿祎选择非自有品牌补贴,可能是看到了小米初期的艰难,也想追求速度,绕开自制手机终端环节。于小米而言,需要解决后续机型承接、持续稳定提升产能;对360而言,需要投入巨量补贴资金&#x…

获取泛型T的ClassT clazz

在我们搭建框架中往往会用到泛型,我们知道泛型的好处是在编译的时候检查类型安全&#xff0c;并且所有的强制转换都是自动和隐式的&#xff0c;代码的重用率高 然而有时候<method>的入参并不能直接强制转换成泛型的类型,比如说下面这段代码&#xff1a; 很明显String 类…

写给大数据开发初学者的话5

见&#xff1a;http://lxw1234.com/archives/2017/01/832.htm 至此&#xff0c;你的大数据平台底层架构已经成型了&#xff0c;其中包括了数据采集、数据存储与计算&#xff08;离线和实时&#xff09;、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提…

3.spring boot Controller获取请求参数的值

2019独角兽企业重金招聘Python工程师标准>>> 1.获取连接中的参数,使用倒的关键词PathVariable RestController public class HelloController {RequestMapping(value "/hello/{id}",method RequestMethod.GET)public String index(PathVariable("i…

断开的管道 java.io.IOException: Broken pipe 解决方法

断开的管道 java.io.IOException: Broken pipe 解决方法一、Broken pipe产生原因分析1.当访问某个服务突然服务器挂了&#xff0c;就会产生Broken pipe;2.客户端读取超时关闭了连接&#xff0c;这时服务器往客户端再写数据就发生了broken pipe异常&#xff01;二、方案1.问题一…