PyPI教程

0x01、簡介

Wiki PyPI

The Python Package Index, abbreviated as PyPI and also known as the Cheese Shop (a reference to the Monty Python's Flying Circus sketch Cheese Shop),[1][2] is the official third-party software repository for Python.[3] It is analogous to CPAN, the repository for Perl.[4] Some package managers, including pip, use PyPI as the default source for packages and their dependencies.[5][6] Over 113,000 Python packages can be accessed through PyPI.[7]

就是說PyPI(Python Package Index)是Python官方的第三方庫,所有人都可以下載或上傳Python庫到PyPI。

0x02、流程

1、注冊賬號

想要上傳自己的Python包沒PyPI賬號怎么行!官網(wǎng)地址

圖片

2、項目架構

1、項目環(huán)境:

  • python3
  • pip
  • setuptools
  • wheel
  • twine

2、項目文件

如果想上傳一個名為 "debug_world" 的Python包,那么她的項目文件如下:

-- packaging_tutorial      # 項目名字
    -- debug_world         # 包名字
        -- __init__.py     # 一定要有init文件
        -- print_str.py    # 功能實現(xiàn)
    -- __init__.py         # 一定要有init文件
    -- README.md           # 一般記錄具體使用方法
    -- setup.py            # 打包程序
圖片

print_str.py文件實現(xiàn)三個功能,代碼如下:

def debug_world():
    print('世界很美好,我去如此暴躁,這樣不好不好')


def hello_world():
    print('Hello, world')


def hello_python():
    print('Hello Python\nPython 大法好')

setup.py文件代碼如下:

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="debug-world",                                     # 包的分發(fā)名稱,使用字母、數(shù)字、_、-
    version="0.0.1",                                        # 版本號, 版本號規(guī)范:https://www.python.org/dev/peps/pep-0440/
    author="liheyou",                                       # 作者名字
    author_email="author@example.com",                      # 作者郵箱
    description="PyPI Tutorial",                            # 包的簡介描述
    long_description=long_description,                      # 包的詳細介紹(一般通過加載README.md)
    long_description_content_type="text/markdown",          # 和上條命令配合使用,聲明加載的是markdown文件
    url="https://github.com/",                              # 項目開源地址,我這里寫的是同性交友官網(wǎng),大家可以寫自己真實的開源網(wǎng)址
    packages=setuptools.find_packages(),                    # 如果項目由多個文件組成,我們可以使用find_packages()自動發(fā)現(xiàn)所有包和子包,而不是手動列出每個包,在這種情況下,包列表將是example_pkg
    classifiers=[                                           # 關于包的其他元數(shù)據(jù)(metadata)
        "Programming Language :: Python :: 3",              # 該軟件包僅與Python3兼容
        "License :: OSI Approved :: MIT License",           # 根據(jù)MIT許可證開源
        "Operating System :: OS Independent",               # 與操作系統(tǒng)無關
    ],
    install_requires=['pymysql>=0.10.0', 'retrying==1.3.3', 'xlrd>=1.2.0', 'openpyxl>=3.0.5'],  # 依賴的包
    python_requires='>=3'
)

# 這是最簡單的配置
# 有關詳細信息,請參閱(https://packaging.python.org/guides/distributing-packages-using-setuptools/)

這里是最簡單的配置,有關詳細信息,請參閱打包和分發(fā)項目

3、本地打包

確保pip,setuptools和wheel是最新的。
雖然pip就能夠保證安裝成功,但是最新的setuptools和wheel對安裝有益無害。

While pip alone is sufficient to install from pre-built binary archives, up to date copies of the setuptools and wheel projects are useful to ensure you can also install from source archives:

python -m pip install --upgrade pip setuptools wheel

進入setup.py同級目錄,然后運行打包程序

# 運行setup.py
python setup.py sdist
# 或者
python setup.py sdist bdist_wheel

此時項目會出現(xiàn)兩個新文件:


圖片

4、上傳PyPI

運行把Python包上傳到PyPI的命令

pip install twine     # 如果已經(jīng)安裝twine,跳過次步驟
python -m twine upload dist/*

# 接著會讓你輸入PyPI用戶名和密碼,注意不是郵箱和密碼
# 出現(xiàn)下面信息說明成功,如有錯誤信息,檢查setup.py配置信息
Uploading distributions to https://upload.pypi.org/legacy/
Uploading debug-world-0.0.1.tar.gz 
100%█████████████████████████| 5.56k/5.56k [00:01<00:00, 3.98kB/s]

如果不想每次上傳都輸入賬號和密碼,可以創(chuàng)建用戶驗證文件 ** ~/.pypirc**
# 而且此方法不安全,容易泄露密碼, 因為密碼是明文
[distutils]
index-servers =
    pypi

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

然后就可以去PyPI官網(wǎng)查看你的包是否成功上傳了


圖片

3、驗證

PyPI推薦通過pip使用Python包

pip install debug-world

新建驗證文件 verify_pypi.py

from debug_world import print_str

print(print_str.hello_world())
print(print_str.debug_world())
print(print_str.hello_python())

查看運行結果,說明成功了

Hello, world
世界很美好,我去如此暴躁,這樣不好不好
Hello Python    Python 大法好

4、刪除版本

當想要刪除某一版本的時候,只需在官網(wǎng)項目管理頁面進行刪除即可。
輸入相對應的版本號。


圖片

0x03、注意事項

  • 包名一定是別人沒用過的
  • 項目文件一定要有** init.py**
  • 運行setup.py文件一定要同級目錄
  • 在上傳PyPI的是時候輸入的是用戶名和密碼,不是郵箱和密碼
  • 上傳之后需要等一段時間,才能下載最新版本的包
  • 更改包的時候一定要修改版本號
  • pip 按照版本號安裝,==前后沒有空格

0x04、報錯

HTTPError: 400 Client Error: File already exists: 版本號錯誤
HTTPError: 403 Client Error: Invalid or non-existent authentication information: 密碼錯誤
error: invalid command 'bdist_wheel':

# 升級pip的安裝工具setuptools
sudo pip install --upgrade setuptools
# 然后更新包
python -m pip install --upgrade pip setuptools wheel

0x05、參考

Wiki PyPI
Python Packaging User Guide

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

相關閱讀更多精彩內容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,313評論 0 10
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,122評論 1 3
  • 一、困惑 作為一個 Python 初學者,我在包管理上感到相當疑惑(嗯,是困惑)。主要表現(xiàn)在下面幾個方面: 這幾個...
    PyChina閱讀 1,258評論 1 6
  • 想記錄下今天。 初來乍到,身體遭受不少苦??戳撕芏啻尾?,見了不同的醫(yī)生,也吃了很多藥。 但也有暖心的瞬間啊。 醫(yī)生...
    hellosun27閱讀 312評論 0 0
  • 《靚女的眼神》淅淅瀝瀝的小雨帶著濃霧,從陰歷二月初五日就開始下了,今晚己是十一日的晚上了,整整下了六天雨,由于...
    阿馼閱讀 668評論 0 0

友情鏈接更多精彩內容