python庫打包

一、背景

想讓自己寫的python庫可以使用pip install xxx安裝。

二、環境準備

  • 注冊PYPI賬號
  • 已經寫好的能正常使用的庫/方法/項目(可以本地調用)
  • 安裝依賴庫setuptoolstwinw
pip install setuptools
pip install twine  # 簡化將庫發布到PYPI流程的工具
pip install wheel  # 制作whl文件需要

三、步驟

1. 調整目錄結構

參考python項目打包結構

|--mypackage__init__.py__version__.py|--common|--config|--src
setup.py
requirements.txt
LICENSE
README.rst
MANIFEST.in
.gitnore

目錄文件的作用:

  • MANIFEST.in
    當你使用 Python 的打包工具(如 setuptools 或 distutils)創建分發包時,
    它們只會自動包含項目目錄中的 Python 模塊和包。但是,在某些情況下,你可
    能還需要在分發包中包含一些其他的文件,如文檔、配置文件、數據文件等。這
    時,就可以使用 MANIFEST.in 文件來指定要包含的其他文件。
include DrissionPage/configs/configs.ini
include DrissionPage/*.pyi
include DrissionPage/*/*.py
include DrissionPage/*/*.pyi
  • setup.py
# -*- coding:utf-8 -*-
from setuptools import setup, find_packageswith open("README.md", "r", encoding='utf-8') as fh:long_description = fh.read()setup(name="DrissionPage",version="3.2.31",author="g1879",author_email="g1879@qq.com",description="Python based web automation tool. It can control the browser and send and receive data packets.",long_description=long_description,long_description_content_type="text/markdown",license="BSD",keywords="DrissionPage",url="https://gitee.com/g1879/DrissionPage",include_package_data=True,packages=find_packages(),zip_safe=False,install_requires=['lxml','requests','cssselect','DownloadKit>=1.0.0','FlowViewer>=0.3.0','websocket-client','click','tldextract'],classifiers=["Programming Language :: Python :: 3.6","Development Status :: 4 - Beta","Topic :: Utilities","License :: OSI Approved :: BSD License",],python_requires='>=3.6',entry_points={'console_scripts': ['dp = DrissionPage.commons.cli:main',],},
)

字段說明:

  • version:這個簡單,就是包的發布的版本,可以直接寫在這,也可以從其他地方引用過來。

  • long_description:默認是rst(reStructuredText )格式的,也可以是其他格式,使用long_description_content_type字段指定,這個里面的內容是顯示在pypi包首頁上。

  • packages:申明你的包里面要包含的目錄,比如 [‘mypackage’, ‘mypackage_test’] 可以是這種使用我的示例,讓setuptools自動決定要包含哪些包

  • install_requires:申明依賴包,安裝包時pip會自動安裝

  • LICENSE

BSD 3-Clause LicenseCopyright (c) 2020, g1879
All rights reserved.Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:* Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimer.* Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.* Neither the name of the copyright holder nor the names of itscontributors may be used to endorse or promote products derived fromthis software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • README.md
項目簡介,markdown格式

2. 打包上傳

項目按照上述結構組織好之后,就可以進行打包了

  • check setup.py
python setup.py check

若沒問題,無報錯信息。

  • 生成打包文件
python setup.py bdist_wheel  # 編譯生成wheel文件,會產生build,dist,XX.egg-info三個文件夾
pip wheel --wheel-dir=whl文件保存路徑 setup.py文件所在路徑  # 直接生成whl文件,不產生中間編譯結果
python setup.py sdist # 生成tar包,即源碼包
  • 上傳生成的包
python setup.py sdist upload  # 上傳source包
python setup.py bdist_wheel upload  # 上傳二進制包
  • 包的安裝
# 源碼包安裝,解壓+編譯+安裝
python setup.py build
python setup.py install
# whl包
pip install XX.whl
  • 測試庫是否可以正常安裝
python setup.py develop
# 該方法不會真正的安裝包,而是在系統環境中創建一個軟鏈接指向包實際所在目錄。
# 這邊在修改包之后不用再安裝就能生效,便于調試

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36400.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

“中國軟件杯”飛槳賽道晉級決賽現場名單公布

“中國軟件杯”大學生軟件設計大賽是由國家工業和信息化部、教育部、江蘇省人民政府共同主辦,是全國軟件行業規格最高、最具影響力的國家級一類賽事,為《全國普通高校競賽排行榜》榜單內賽事。今年,組委會聯合百度飛槳共同設立了“智能系統設…

C++11之后的C++標準特性宏定義方便功能特性測試

C是一個龐大的編程語言體系,它的高效性是可以直接連接硬件系統,它的靈活性是不斷迭代完善的通用語義機制,當下C的發展演進可謂一路狂奔。不同應用中需要知道C對應的平臺或者版本的功能特性,標準庫信息、C編譯器特性等,…

基于PHP的輕量級博客typecho

本文完成于 5 月中旬,發布時未在最新版本上驗證; 什么是 typecho ? Typecho 是一款基于 PHP 的博客軟件,旨在成為世界上最強大的博客引擎。Typecho 在 GNU 通用公共許可證 2.0 下發布。支持多種數據庫,原生支持 Markdo…

24屆近5年南京大學自動化考研院校分析

今天給大家帶來的是南京大學控制考研分析 滿滿干貨~還不快快點贊收藏 一、南京大學 學校簡介 南京大學是一所歷史悠久、聲譽卓著的高等學府。其前身是創建于1902年的三江師范學堂,此后歷經兩江師范學堂、南京高等師范學校、國立東南大學、國立第四中…

JS 刪除的是最后一頁的最后一條,頁碼設置邏輯

刪除的場景: 解決思路: 1、計算操作后的總頁數 2、刪除成功之后的總頁數與當前總頁數進行比較 3、如果刪除成功之后的總頁數比小于當前總頁數,需要把當前頁碼減去1;否則,直接進行列表數據的請求 代碼實現 /*總條數…

VBA 學習筆記1 對象以及屬性

目錄 1 取得VBA對象1.1 取得工作簿對象1.2 取得工作表對象1.3 取得單元格對象1.4 取得對象的屬性1.5 文檔的方法1 進入vba 界面 方式之一: 快捷鍵:ALTERF11 運行方式之一: 進入vba界面,點擊綠色三角符號 1 取得VBA對象 1.1 取得…

DAY21

題目一 給定三個字符串str1、str2和aim, 如果aim包含且僅包含來自str1和str2的所有字符,而且在aim中屬于str1的字符 之間保持原來在str1中的順序,屬于str2的字符之間保持原來在str2中的順序,那么稱aim是str1和str2的交錯組成。實…

Springboot-Retrofit HTTP工具框架快速使用

在SpringBoot項目直接使用okhttp、httpClient或者RestTemplate發起HTTP請求,既繁瑣又不方便統一管理。 因此,在這里推薦一個適用于SpringBoot項目的輕量級HTTP客戶端框架retrofit-spring-boot-starter,使用非常簡單方便,同時又提供…

約數個數(質因子分解)

思路: (1)由數論基本定理,任何一個正整數x都能寫作,其中p1,p2..pk為x的質因子。 (2)由此可以推斷,要求一個數約數的個數,注意到約數就是p1,p2...pk的一種組合&#xff…

日常BUG—— SpringBoot項目DEBUG模式啟動慢、卡死。

😜作 者:是江迪呀??本文關鍵詞:日常BUG、BUG、問題分析??每日 一言 :存在錯誤說明你在進步! 一、問題描述 我們調試程序時,需要使用DEBUG模式啟動SpringBoot項目, 有時候會發…

convert Auto-Login (cwallet.sso) Wallet into a PKCS12 compliant Wallet

一步不行嗎 &#xff1f; 1. If $JAVA_HOME is not set: a)For FMW 11g components associated with a WebLogic Domain or a FMW 12c Collocated OHS install run: $MIDDLEWARE_HOME/user_projects/domains/<domain>/bin/setDomainEnv.sh b) For FMW 11g Standalone…

側滑置頂,取消置頂

第一步:布局 <?xml version"1.0" encoding"utf-8"?> <com.ddmh.magic.camera.ui.widget.SwipeMenuLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…

SQL | 使用通配符進行過濾

6-使用通配符進行過濾 6.1-LIKE操作符 前面介紹的所有操作符都是通過已知的值進行過濾&#xff0c;或者檢查某個范圍的值。但是如果我們想要查找產品名字中含有bag的數據&#xff0c;就不能使用前面那種過濾情況。 利用通配符&#xff0c;可以創建比較特定數據的搜索模式。 …

selenium 爬蟲

selenium 可以動態爬取網頁數據&#xff0c;就像真實用戶操作瀏覽器一樣&#xff0c;從終端用戶的角度測試應用程序&#xff0c;WebDriver通過原生瀏覽器支持或者瀏覽器擴展直接控制瀏覽器 webdriver下載 因為selenuim對瀏覽器的版本存在兼容問題&#xff0c;顧需要針對指定瀏…

SAP系統是什么呢?它有哪些優勢?

SAP系統是全球知名的企業資源規劃&#xff08;ERP&#xff09;解決方案供應商。它集成了財務、供應鏈管理、人力資源管理、銷售和客戶關系管理等多個功能模塊&#xff0c;為企業提供全面、集成的管理體驗。SAP系統已成為各行各業企業管理的智慧選擇&#xff0c;極大地提升了管理…

c++ 有元

友元分為兩部分內容 友元函數友元類 友元函數 問題&#xff1a;當我們嘗試去重載operator<<&#xff0c;然后發現沒辦法將operator<<重載成成員函數。因為cout的輸出流對象和隱含的this指針在搶占第一個參數的位置。this指針默認是第一個參數也就是左操作 數了。…

如何在vue3中加入markdown語法

1、首先需要安裝 md-editor-v3 yarn add md-editor-v3 或者是在vue圖形化界面中直接搜索 md-editor-v3 進行安裝。 2、引入該編輯頁 引入可以參考這個&#xff0c;根據自己的需求進行修改和添加。 <template><md-editor v-model"text"/> </templat…

基于dbn+svr的交通流量預測,dbn詳細原理

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) DBN+SVR的交通流量預測 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類算法,本文將DBN+SVR用于交通流量預測…

二叉樹題目:二叉樹的直徑

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 解法思路和算法代碼復雜度分析 題目 標題和出處 標題&#xff1a;二叉樹的直徑 出處&#xff1a;543. 二叉樹的直徑 難度 3 級 題目描述 要求 給定二叉樹的根結點 root \texttt{root} root&#xff0c;返回其直徑…

考研408 | 【計算機網絡】 傳輸層

導圖 傳輸層的功能 傳輸層的兩個協議 傳輸層的尋址與端口 UDP協議 UDP的主要特點 UDP首部格式&#xff1a; UDP校驗&#xff1a; TCP協議 TCP協議的特點 TCP報文段首部格式 TCP連接管理 TCP的連接建立 SYN洪泛攻擊 TCP的連接釋放 TCP可靠傳輸 序號&#xff1a; 確認&#xff1…