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,用法十分简单,只有两个方法。
2018年7月份,python上传自己的包库到pypi官网的方法的更多相关文章
- windows上python上传下载文件到linux服务器指定路径【转】
从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...
- 详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器
首先需要一个Nuget账户,可以在官网注册:https://www.nuget.org.已有账户略. 需要一个ApiKeys,登录之后,在我的账户里找到ApiKeys进去; 创建ApiKeys 下载N ...
- Maven入门:使用Nexus搭建Maven私服及上传下载jar包
一. 私服搭建及配置 1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓 ...
- NPM 上传自己的包
NPM 上传自己的包 项目中经常 npm install,npm init啥的,那么如何上传自己的包到npm上呢. 注册账号 NPM官网 本地弄一个包 创建npm_test 文件夹 注:不能够有一些特 ...
- 上传 第三方jar包 nexus
手动上传第三方jar包到nexus的步奏: 1)按下图方式进行 2)按下图完成上传 3)点击保存完成
- GIT将本地项目上传到Github(两种简单、方便的方法)
GIT将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安 ...
- Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- GitHub上传项目到远程库
写文章 GitHub上传项目到远程库 GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...
- Git 使用,本地项目上传到GitHub远程库
Git 使用,本地项目上传到GitHub远程库 环境 GitHub账号 点此进入github官网 git客户端工具 点此进入git下载页 本地项目上传到 GitHub 在GitHub中创建一个仓库(远 ...
随机推荐
- 处理异常json串的jar包JsonSerde
参考下面文章: https://blog.csdn.net/SunnyYoona/article/details/70170173
- [转]css选择器优先级深入理解
转载自:http://www.jb51.net/css/67029.html 一.基础选择器 css基础选择器有标签选择器.类选择器.id选择器.通用选择器 1.标签选择器 每个html页面都由很多个 ...
- hbase源码系列(七)Snapshot的过程
在看这一章之前,建议大家先去看一下snapshot的使用.可能有人会有疑问为什么要做Snapshot,hdfs不是自带了3个备份吗,这是个很大的误区,要知道hdfs的3个备份是用于防止网络传输中的失败 ...
- 《开发专家 Visual C 开发入行真功夫》笔记
智能感知的功能,输入 is 后,同时按下Alt + →这两个键就出现了供选择变量.方法.宏等的列表,继续输入 in 后,isInit就出来了. stdafx.h预编译头文件,.h应用程序主头文件,do ...
- 1 php protocolbuffers安装
安装工具 yum install autoconf yum install libtool 安装protoc编译器 # cd /root/soft/protobuf- autogen.sh : if ...
- 给初学者的20个CSS实用建议
英文原文:20-useful-css-tips-for-beginners,编译:杨礼鑫 过去就连一个镜像站点,我们都依靠大量的开发人员和程序员进行维护.得益于CSS和它的灵活性使得样式能够从代码中被 ...
- Linux gcc编译之-std选项
用GCC编译代码时候后面带有-std=c++1z 的选项,这是指定c/c++的标准.具体的标准如下,详细信息可以看引用里面的详细说明
- Python判断操作系统类型
代码: import platform def TestPlatform(): print ("----------Operation System--------------------- ...
- Unity导入3D模型的过程与方法
一.介绍 资源是游戏开发中的原材料,也就是组成游戏的模块. Unity只是一个游戏开发引擎,而并不是一个资源开发软件.这就意味着在游戏中需要的资源通常是由一些设计者使用其他软件开发出来的,然后设计者会 ...
- e827. 设置JSplitPane中分隔物的大小
A divider can be no less than one pixel in size. // Create a left-right split pane JSplitPane pane = ...