日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自己创建模块_创建并发布自己的python模块

發布時間:2025/1/21 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自己创建模块_创建并发布自己的python模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python通過模塊來共享組織代碼,python不僅內置了豐富的標準庫,而且python社區還貢獻了大量的第三方模塊,正是由于第三方模塊大大擴展了python的應用領域,成就了如今python的江湖地位。人人都可以向社區共享代碼,PyPI(Python Package Index)為第三方python模塊提供了一個集中的存儲庫,今天我們就來嘗試建立自己的模塊并發布到PyPI上。

以下內容在windows10系統下驗證OK,其他系統應該差別不大,linux系統python3版本需要將python命令替換為python3

創建模塊

所謂模塊就是一個包含python代碼的文本文件,擴展名為.py。我們以一個簡單的打印嵌套列表的函數為例,在某個目錄下新建一個.py擴展名的文件(如nestList.py),輸入如下代碼:

#python 3.7

"""

模塊示例

可以打印嵌套列表

"""

# indent表示縮進,默認0表示無縮進

def print_list(lst, indent = 0):

for item in lst:

# 判斷列表lst中的每一項是否是list對象,

# 如果是則遞歸調用print_list,同時縮進級別加1

if isinstance(item, list):

print_list(item, indent + 1)

else:

print("--" * indent, end="")

print(item)

打開終端,cd到該.py文件所在的目錄,執行python命令進入交互模式,通過import直接導入該模塊測試print_list函數

交互模式測試導入模塊.png

發布模塊

上一節我們已經創建并測試了我們的模塊,但是如果我們要共享模塊,還需要一些額外的文件,這些文件集合在一起允許你構建、打包和發布你自己的模塊

1. 構建前的準備

構建模塊前我們需要創建類似如下的文件目錄結構,example_pkg目錄下創建文件LICENSE,README.md,setup.py三個文件,子目錄example_pkg_zx1下創建__init__.py(注意是兩個下劃線),拷貝上一節創建的nestList.py到此目錄下,我們逐個說明下其余各個文件的內容。

構建前文件目錄.png

setup.py是setuptools的構建腳本,它告訴setuptools你的包的相關信息(如包名稱、版本等)

import setuptools

with open("README.md", "r", encoding="utf-8") as fh:

long_description = fh.read()

setuptools.setup(

name="example_pkg_zx1",

version="0.0.1",

author="Example Author",

author_email="author@example.com",

description="A small example package",

long_description=long_description,

long_description_content_type="text/markdown",

url="https://github.com/PepperPapa/xinNotes",

packages=setuptools.find_packages(),

classifiers=[

"Programming Language :: Python :: 3",

"License :: OSI Approved :: MIT License",

"Operating System :: OS Independent",

],

)

name,version,author,author_email,description,url根據名稱的含義參考你的模塊功能進行填寫即可,沒有特別要注意的地方。(注:name參數在上傳到internet上要求必須是唯一的,不能有重復,否則無法上傳)

long_description為讀取README.md的內容,encoding="utf-8"設置是為了README.md的內容支持中文,long_description_content_type執定long_description內容格式為markdown。

packages通過setuptools.find_packages()函數會查找目錄example_pkg_zx1下所有需要包含的模塊,避免手工輸入的麻煩。

classifiers提供一些額外的模塊信息,是一個列表格式。

LICENSE是規定了你使用哪種協議發布自己的模塊,如下MIT license的內容。如果你只是學習如何發布,直接copy如下內容即可,不用特別關注。

Copyright (c) 2018 The Python Packaging Authority

Permission is hereby granted, free of charge, to any person obtaining a copy

of this software and associated documentation files (the "Software"), to deal

in the Software without restriction, including without limitation the rights

to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

copies of the Software, and to permit persons to whom the Software is

furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all

copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

SOFTWARE.

README.md的內容也就是對模塊的詳細說明,示例如下:

# Example Package

nestList.py是一個可以打印縮進列表的示例函數,示例代碼如下:

from example_pkg_zx1 import nestList

alist = ["grace", "angle", "roy",

["anna", "jhon", "richard", ["nio", "lily"]],

"bluce"]

nestList.print_list(alist)

__init__.py僅一行代碼,提供模塊名稱信息

name = "example_pkg_zx1"

2. 構建發布文件

接下來就是要構建發布文件了,會用到setuptools和wheel兩個工具,終端下執行如下命令確保已經安裝了最新版本

python -m pip install --user --upgrade setuptools wheel

安裝setuptools和wheel.png

接著在setup.pyt文件所在目錄下執行如下命令開始構建

python setup.py sdist bdist_wheel

開始構建.png

構建完成后會創建多個文件及目錄,其中dist目錄下會生成.whl和.tar.gz兩個文件

構建后文件目錄.png

上傳模塊到PyPI

最激動人心的莫過是把自己的模塊分享到internet上,讓全球的程序員都能使用你貢獻的代碼,想想都很激動吧。因為只是演示如何上傳模塊,并不是真正有用的模塊,最好是能通過一個測試平臺來給大家來練習,Test PyPI就是提供這樣的功能,讓你隨意上傳自己的模塊進行測試和實驗,首先你需要在注冊Test PypI頁面上注冊一個賬戶并登陸郵箱驗證。上傳發布包需要用到twine這個工具,首先需要通過下面的命令進行安裝。

python -m pip install --user --upgrade twine

安裝上傳工具twine.png

安裝成功后,在example_pkg目錄下使用下面的命令上傳你的發布包

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

上傳自己的模塊.png

說明:

1.你的模塊名稱及子目錄名稱(示例為example_pkg_zx1)不能有重復,否則上傳會失敗,提示HTTPError: 403 Client Error: The user 'xxxx' isn't allowed to upload to project 'example-pkg'錯誤,遇到這種情況需要修改子目錄example_pkg_zx1及setup.py中的name,然后重新嘗試上傳直到成功。

提示上傳成功后,登陸Test PypI頁面Your projects下查看應該就能看到你上傳的模塊了。

test_pypi查看上傳的模塊.png

從PyPI安裝自己的模塊

你可以使用pip從Test PyPI上安裝你的模塊來驗證是否能工作,example_pkg_zx1為模塊名稱

python -m pip install --index-url https://test.pypi.org/simple/ example_pkg_zx1

注意上面的命令不要在example_pkg目錄下執行,否則會提示模塊已經存在而不執行安裝,隨意cd到其他的目錄下執行

從test_pypi安裝自己的模塊.png

交互模式下測試已安裝的模塊

驗證已安裝模塊.png

最后的提示

如果你已經準備好了正式發布自己的模塊到PyPI(與Test PyPI不同哦),你需要首先在https://pypi.org上注冊正式的賬戶并驗證郵箱,twine上傳命令直接使用"twine upload dist/*"命令即可,不用再指定url;同樣從PyPI安裝模塊直接使用命令"pip install your-package-name"進行安裝,也不用指定url。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python自己创建模块_创建并发布自己的python模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。