最近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,用法十分簡單,只有兩個方法。