上位機知識篇---setuptools


文章目錄

  • 前言
  • 簡介
  • 一、核心功能
    • 1.依賴管理
      • 自動安裝依賴
      • 版本約束
      • 額外依賴組
      • 命令行工具
      • 插件系統
    • 2.開發模式安裝
    • 3.資源文件管理
    • 4.Egg 分發(已逐漸被 Wheel 取代)
    • 5.命名空間包
  • 二、基礎用法
    • 1. 項目結構示例
    • 2. 配置文件 setup.cfg
    • 3. setup.py 最小化示例(現代項目可省略)
    • 4. 常用命令
  • 三、進階用法與最佳實踐
    • 1. 動態版本號
    • 2. 包含數據文件
    • 3. Cython 擴展
    • 4. 兼容性標記
    • 5. 自定義構建命令
  • 四、常見問題解決
    • 1.找不到包?
    • 2.資源文件未包含?
    • 3.Entry Point 不生效?
  • 五、生態工具鏈整合
    • 1.構建
    • 2.上傳
    • 3.虛擬環境
    • 4.測試
    • 5.文檔
  • 總結


前言

本文僅僅簡單介紹了Python中setuptools的模塊的功能以及使用方法。


簡介

setuptools 是 Python 生態中用于打包和分發項目的核心工具,它擴展了 Python 原生的 distutils 模塊,提供了更強大的功能和更便捷的配置方式。以下從功能、用法和最佳實踐三個維度進行詳細說明:

一、核心功能

1.依賴管理

自動安裝依賴

自動安裝依賴:通過 install_requires 聲明依賴,pip install 時會自動安裝。

版本約束

版本約束:支持語義化版本(如 >=2.0,??.0)

額外依賴組

額外依賴組:通過 extras_require 定義可選依賴(如測試、文檔依賴)。

命令行工具

命令行工具:將 Python 函數映射為命令行命令(如 pip 自身即通過 entry point 實現)。

插件系統

插件系統:其他程序可通過 entry points 動態發現并加載你的包(如 pytest 插件)。

2.開發模式安裝

pip install -e .:將包以“可編輯模式”安裝,代碼修改無需重新安裝,直接生效。

3.資源文件管理

自動包含 package_data 中聲明的非代碼文件(如配置文件、模板)。

4.Egg 分發(已逐漸被 Wheel 取代)

提供 .egg 格式分發,支持二進制依賴(現推薦使用 wheel 格式)。

5.命名空間包

支持在多個項目中共享同一個包命名空間(如 google.cloud.storage 和 google.cloud.bigquery)。

二、基礎用法

1. 項目結構示例

my_project/
├── src/  # 推薦使用 src 目錄隔離源碼
│   └── my_pkg/
│       ├── __init__.py
│       └── module.py
├── tests/
├── pyproject.toml  # 構建系統聲明
├── setup.cfg       # 推薦:靜態配置
└── setup.py        # 動態配置(可選,逐漸被 setup.cfg 替代)

2. 配置文件 setup.cfg

[metadata]
name = my_pkg
version = 1.0.0
author = Your Name
description = A sample package[options]
package_dir = = src
packages = find:  # 自動查找包
install_requires =requests>=2.24.0numpy~=1.20.0[options.extras_require]
test =pytest>=6.0
dev = %(test)sflake8>=3.8[options.entry_points]
console_scripts =mycli = my_pkg.cli:main
pytest11 =myplugin = my_pkg.pytest_plugin

3. setup.py 最小化示例(現代項目可省略)

from setuptools import setupsetup()

4. 常用命令

#安裝開發模式
pip install -e .#構建源碼包和 Wheel
python -m build#上傳到 PyPI
twine upload dist/*

三、進階用法與最佳實踐

1. 動態版本號

在 setup.cfg 中引用 __version__:#my_pkg/__init__.py
__version__ = "1.2.3"#setup.cfg
[metadata]
version = attr: my_pkg.__version__

2. 包含數據文件

[options]
include_package_data = True[options.package_data]
my_pkg =data/*.jsonconfigs/*.yml

3. Cython 擴展

from setuptools import setup, Extension
from Cython.Build import cythonizeextensions = [Extension("my_pkg.optimized", ["src/my_pkg/optimized.pyx"])
]setup(ext_modules=cythonize(extensions))

4. 兼容性標記

[metadata]
classifiers =Programming Language :: Python :: 3Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9

5. 自定義構建命令

繼承 setuptools.Command 實現自定義命令:

from setuptools import setup, Commandclass CustomCommand(Command):def run(self):print("Running custom task...")setup(cmdclass={'custom': CustomCommand})

四、常見問題解決

1.找不到包?

使用 package_dir 和 packages=find: 自動檢測。
確保 init.py 存在于每個包目錄。

2.資源文件未包含?

檢查 MANIFEST.in 或 include_package_data=True。

3.Entry Point 不生效?

確認函數簽名正確(如 def main():)。
重新安裝包(pip install -e .)。

五、生態工具鏈整合

1.構建

構建:使用 build 替代 python setup.py sdist bdist_wheel

2.上傳

上傳:使用 twine 替代 setup.py upload

3.虛擬環境

虛擬環境:結合 virtualenv/venv

4.測試

測試:通過 tox 實現多環境測試

5.文檔

文檔:與 Sphinx 集成生成文檔

通過合理使用 setuptools,可以實現從代碼管理到分發的全流程標準化,建議結合 pyproject.toml (PEP 621) 實現更現代的配置方式。


總結

以上就是今天要講的內容,本文僅僅簡單介紹了Python中setuptools的模塊的功能以及使用方法。

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

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

相關文章

藍橋杯學習大綱

(致酷德與熱愛算法、編程的小伙伴們) 在查閱了相當多的資料后,發現沒有那篇博客、文章很符合我們備戰藍橋杯的學習路徑。所以,干脆自己整理一篇,歡迎大家補充! 一、藍橋必備高頻考點 我們以此為重點學習…

Go 錯誤處理與調試:面向對象的入門教程

Go 錯誤處理與調試:面向對象的入門教程 Go 語言因其簡潔、高效和易于并發編程的特性,逐漸成為后端開發的主流語言之一。錯誤處理是任何編程語言中非常重要的一部分,尤其是在 Go 語言中,Go 提供了一種不同于傳統異常處理機制的錯誤…

Linux探秘坊-------4.進度條小程序

1.緩沖區 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }執行此代碼后&#xff0c;會 先停頓兩秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;為什么會后打印呢&#xff1f; 因為&#xff…

基于Python的Diango旅游數據分析推薦系統設計與實現+畢業論文(15000字)

基于Python的Diango旅游數據分析推薦系系統設計與實現畢業論文指導搭建視頻&#xff0c;帶爬蟲 配套論文1w5字 可定制到某個省份&#xff0c;加40 基于用戶的協同過濾算法 有后臺管理 2w多數據集 可配套指導搭建視頻&#xff0c;加20 旅游數據分析推薦系統采用了Python語…

Scrapy:DownloaderAwarePriorityQueue隊列設計詳解

DownloaderAwarePriorityQueue 學習筆記 1. 簡介 DownloaderAwarePriorityQueue 是 Scrapy 中一個高級的優先級隊列實現&#xff0c;它不僅考慮請求的優先級&#xff0c;還會考慮下載器的負載情況。這個隊列為每個域名&#xff08;slot&#xff09;維護獨立的優先級隊列&#…

dify-AI 私有部署可修改前端頁面

dify文檔 官方文檔&#xff1a;歡迎使用 Dify | Dify 源碼&#xff1a;https://github.com/langgenius/dify.git 安裝docker 官網&#xff1a;https://www.docker.com/ 部署服務到docker cd dify cd docker cp .env.example .env docker compose up -d查看效果 http://localh…

PHP基礎部分

但凡是和輸入、寫入相關的一定要預防別人植入惡意代碼! HTML部分 語句格式 <br> <hr> 分割符 <p>插入一行 按住shift 輸入! 然后按回車可快速輸入html代碼(VsCode需要先安裝live server插件) html:<h1>標題 數字越大越往后</h1> <p…

【Elasticsearch】Retrieve inner hits獲取嵌套查詢的具體的嵌套文檔來源,以及父子文檔的來源

Retrieve inner hits 是 Elasticsearch 中的一個功能&#xff0c;用于在嵌套查詢或父子查詢中&#xff0c;返回導致主文檔匹配的具體嵌套對象或子/父文檔的詳細信息&#xff0c;幫助用戶更直觀地理解查詢結果的來源。 在 Elasticsearch 中&#xff0c;Retrieve inner hits是一…

SpringCloud面試題----eureka和zookeeper都可以提供服務注冊與發現的功能,請說說兩個的區別

dEureka 和 Zookeeper 都可以提供服務注冊與發現的功能,它們的區別主要體現在以下幾個方面: 設計理念 Eureka:是基于 RESTful 風格設計的,強調簡單、輕量級,旨在為微服務架構提供一種易于使用的服務發現解決方案,注重服務的可用性和靈活性。Zookeeper:最初是為分布式協…

數據庫提權總結

Mysql提權 UDF提權是利用MYSQL的自定義函數功能&#xff0c;將MYSQL賬號轉化為系統system權限 前提&#xff1a; 1.UDF提權條件 &#xff08;1&#xff09;Mysql版本大于5.1版本udf.dll文件必須放置于MYSQL安裝目錄下的lib\plugin文件夾下。 &#xff08;2&#xff09;Mysql…

“深入淺出”系列之QT:(10)Qt接入Deepseek

項目配置&#xff1a; 在.pro文件中添加網絡模塊&#xff1a; QT core network API配置&#xff1a; 將apiUrl替換為實際的DeepSeek API端點 將apiKey替換為你的有效API密鑰 根據API文檔調整請求參數&#xff08;模型名稱、溫度值等&#xff09; 功能說明&#xff1a; 使…

【Linux探索學習】第二十七彈——信號(上):Linux 信號基礎詳解

Linux學習筆記&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我們已經將進程通信部分講完了&#xff0c;現在我們來講一個進程部分也非常重要的知識點——信號&#xff0c;信號也是進程間通信的一…

nginx負載均衡, 解決iphash不均衡的問題之consistent

原因分析 客戶端IP分布不均&#xff1a;部分IP段請求集中&#xff0c;導致哈希到同一后端。 服務器數量變動&#xff1a;增刪節點時&#xff0c;傳統ip_hash未使用一致性哈希&#xff0c;導致分布重置。 哈希鍵范圍過小&#xff1a;例如僅使用IPv4前24位&#xff0c;不同IP可…

[C++]多態詳解

目錄 一、多態的概念 二、靜態的多態 三、動態的多態 3.1多態的定義 3.2虛函數 四、虛函數的重寫&#xff08;覆蓋&#xff09; 4.1虛函數 4.2三同 4.3兩種特殊情況 &#xff08;1&#xff09;協變 &#xff08;2&#xff09;析構函數的重寫 五、C11中的final和over…

WEB安全--SQL注入--PDO與繞過

一、PDO介紹&#xff1a; 1.1、原理&#xff1a; PDO支持使用預處理語句&#xff08;Prepared Statements&#xff09;&#xff0c;這可以有效防止SQL注入攻擊。預處理語句將SQL語句與數據分開處理&#xff0c;使得用戶輸入的數據始終作為參數傳遞給數據庫&#xff0c;而不會直…

ES12 weakRefs的用法和使用場景

ES12 (ECMAScript 2021) 特性總結&#xff1a;WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一個新特性&#xff0c;用于創建對對象的弱引用。弱引用不會阻止垃圾回收器回收對象&#xff0c;即使該對象仍然被弱引用持有。WeakRef 通常與 FinalizationRegistry 結合使…

50頁精品PPT | 某大數據資產平臺建設項目啟動會材料

該PPT主要介紹了某集團大數據資產平臺建設項目的啟動會材料&#xff0c;圍繞數據作為數字經濟時代核心生產要素的背景&#xff0c;結合國家戰略和集團數字化轉型需求&#xff0c;分析了當前數據資源整合不足、孤島現象嚴重、質量管控薄弱及共享機制不完善等問題&#xff0c;提出…

8.【線性代數】——求解Ax=b

八 求解Axb 1. 解Axb求特解 x p x_p xp?求特解 x n x_n xn?所有解 2. Axb什么時候有解3. A m ? n A_{m * n} Am?n?不同秩的Axb解分析3.1 列滿秩 rn<m3.2 行滿秩 rm<n3.3 rmn3.4 r<m 且 r < n3.5 綜述 1. 解Axb 求解 { x 1 2 x 2 2 x 3 2 x 4 b 1 2 x 1…

動靜態鏈接與加載

目錄 靜態鏈接 ELF加載與進程地址空間&#xff08;靜態鏈接&#xff09; 動態鏈接與動態庫加載 GOT表 靜態鏈接 對于多個.o文件在沒有鏈接之前互相是不知到對方存在的&#xff0c;也就是說這個.o文件中調用函數的的跳轉地址都會被設定為0&#xff08;當然這個函數是在其他.…

Web 后端 請求與響應

一 請求響應 1. 請求&#xff08;Request&#xff09; 客戶端向服務器發送的HTTP請求&#xff0c;通常包含以下內容&#xff1a; 請求行&#xff1a;HTTP方法&#xff08;GET/POST等&#xff09;、請求的URL、協議版本。 請求頭&#xff08;Headers&#xff09;&#xff1a;…