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-8 from setuptools import setup, find_packages with 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,用法十分简单,只有两个方法。