PyPI打包上傳實(shí)踐

網(wǎng)上的教程很多,在此寫此篇僅為自己以后使用時(shí)查找方便,第一次嘗試,有錯(cuò)誤歡迎留言糾正!

1. 代碼打包

要打包代碼,首先需要編寫自己的代碼包。比如你寫了一個(gè).py文件,里面有一些函數(shù)啥的,為了方便調(diào)用,你需要將代碼打包,下次使用時(shí)直接調(diào)用就好,因此,第一步,將你寫的代碼打包。
創(chuàng)建一個(gè)文件夾,并在該文件夾下創(chuàng)建 __init__.py 文件,然后將你寫的.py文件放到這個(gè)文件夾下面就行。

packagename/
    |
    +-- __init__.py
    |
    +-- myfunction.py
    |
    +-- mymorefunction.py
    |
    +-- ...
    |

packagename為你創(chuàng)建的包名稱,myxxx.py是你寫的python代碼,還有添加個(gè)__init__.py文件(文件內(nèi)容可以為空).
現(xiàn)在你可以調(diào)用這個(gè)包了(引入包的路徑)

import packagename

2. 符合pypi的格式

將上面的文件的目錄結(jié)構(gòu)改成如下格式

packagename
    |
    +-- COPYING.txt
    |
    +-- README.rst
    |
    +-- setup.py
    |
    +-- packagename
    .       |
    .       +-- __init__.py
    .       |
    .       +-- myscripts1.py
    .       |
    .       +-- mysscripts2.py
    .       |
    .       +-- mymorescripts.py
    .       |
    .
    |
    +-- docs/
    |

就是將原來的目錄深移一層,文件夾的名稱一樣即可。在第一層目錄下創(chuàng)建些特殊文件。
Tips

  • COPYING.txt :可以不要(節(jié)約時(shí)間,重要的事情先說、簡單說)。
    就是授權(quán)文件,里面是你關(guān)于這個(gè)包的授權(quán),比如:MIT license,那么你里面放入MIT License全文即可,當(dāng)然,如果你不清楚這個(gè),你完全可以不要這個(gè)文件。
  • README.rst:就是介紹,可以不要吧(不推薦,要是想讓大家用的話還是好好寫一寫)
    這個(gè)文件想必研發(fā)都應(yīng)該清楚。如果有,盡量放些東西在這里了,后面如果可能我們會用到它的。
  • setup.py:核心文件
    這里面的內(nèi)容后面講
  • docs/(這是個(gè)文件夾,存放一些文檔的)
    這個(gè)文件夾你放你的documents吧,不過要用心寫文檔真是個(gè)難事,所以這個(gè)文件夾基本是不存在的——為自己的懶惰可恥一把。

setup.py的樣例

# coding: utf-8
import codecs
import os
import sys

try:
    from setuptools import setup
except:
    from distutils.core import setup

"""
打包的用的setup必須引入,
"""

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 

import sys
if sys.version_info < (2, 5):
    sys.exit('Python 2.5 or greater is required.')
 
try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup
 
import SendMoney
 
 
with open('README.rst', 'rb') as fp:
    readme = fp.read()
 
# 版本號,自己隨便寫
VERSION = "1.0.7"

LICENSE = "MIT"

 
setup(
    name='<項(xiàng)目的名稱>',
    version=VERSION,
    description=(
        '<項(xiàng)目的簡單描述>'
    ),
    long_description=readme,
    author='<你的名字>',
    author_email='<你的郵件地址>',
    maintainer='<維護(hù)人員的名字>',
    maintainer_email='<維護(hù)人員的郵件地址',
    license=LICENSE,
    packages=find_packages(),
    platforms=["all"],
    url='<項(xiàng)目的網(wǎng)址,我一般都是github的url>',
    install_requires=[  
        "beautifulsoup4",  
        lxml_requirement  
        ],  
    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'
    ],
)


# URL 你這個(gè)包的項(xiàng)目地址,如果有,給一個(gè)吧,沒有你直接填寫在PyPI你這個(gè)包的地址也是可以的
# INSTALL_REQUIRES 模塊所依賴的python模塊
# 以上字段不需要都包含

文中的classifiers的內(nèi)容并不是隨便填寫的,你需要參照本文參考文檔中的PyPI Classifiers來寫

3、開始使用Distutils進(jìn)行打包

為了保證效果,在打包之前我們可以驗(yàn)證setup.py的正確性,執(zhí)行下面的代碼

python setup.py check

輸出一般是running check
如果有錯(cuò)誤或者警告,就會在此之后顯示
沒有任何顯示表示Distutils認(rèn)可你這個(gè)setup.py文件。

如果沒有問題,那么就可以正式打包,執(zhí)行下面的代碼:

python setup.py sdist

執(zhí)行完成后,會在頂層目錄下生成dist目錄和egg目錄

打包完成后就可以準(zhǔn)備將打包好的模塊上傳到pypi了,首先你需要在pypi上進(jìn)行注冊
注冊完成后,你需要在本地創(chuàng)建好pypi的配置文件,不然有可能會出現(xiàn)使用http無法上傳到pypi的問題
在用戶目錄下創(chuàng)建.pypirc文件,文件的內(nèi)容如下(小提示:window用戶創(chuàng)建.pypirc可以命名為.pypirc.)

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

完成后運(yùn)行:

python setup.py register sdist upload

最后出現(xiàn)Server response (200): OK就是成功了,可以去pypi上查看自己發(fā)布的包

包到這里,就完成了上傳PyPI的工作了。你如果要用,安裝下就好:

pip install packagename

這個(gè)過程還是很順利的,以后多嘗試,出現(xiàn)問題再補(bǔ)充!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,120評論 1 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,822評論 6 427
  • Python 資源 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列的資源整理。a...
    葉冷隨記閱讀 7,974評論 1 225
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣。awesome-p...
    若與閱讀 19,300評論 4 417
  • 一起兩個(gè)月,不想在繼續(xù)了,不想妥協(xié)了 不是我不努力,對未來看不到光的事情,我努力了也是白費(fèi),就算在喜歡,可我也有底...
    憶獨(dú)閱讀 80評論 0 0

友情鏈接更多精彩內(nèi)容