用Setuptools構建和分發程式包

来源:https://www.cnblogs.com/zhijiancanxue/archive/2020/03/16/12507304.html
-Advertisement-
Play Games

[toc] 使用Setuptools構建和分發軟體包 參考 "官方文檔" 翻譯 開發人員指南 安裝setuptools 安裝最新版本的setuptools: 基本使用 引入setuptools基本使用 要生成源代碼分發,只需調用: 隨著項目的增大將會包括一些依賴項,以及一些數據文件和腳本: 下麵我們 ...


目錄

使用Setuptools構建和分發軟體包

參考官方文檔翻譯

開發人員指南

安裝setuptools

安裝最新版本的setuptools:

python3 -m pip install --upgrade setuptools

基本使用

引入setuptools基本使用

from setuptools import setup, find_packages
setup(
    name="HelloWorld",
    version="0.1",
    packages=find_packages(),
)

要生成源代碼分發,只需調用:

setup.py sdist

隨著項目的增大將會包括一些依賴項,以及一些數據文件和腳本:

from setuptools import setup, find_packages
setup(
    name="HelloWorld",
    version="0.1",
    packages=find_packages(),
    scripts=["say_hello.py"],

    # Project uses reStructuredText, so ensure that the docutils get
    # installed or upgraded on the target machine
    install_requires=["docutils>=0.3"],

    package_data={
        # If any package contains *.txt or *.rst files, include them:
        "": ["*.txt", "*.rst"],
        # And include any *.msg files found in the "hello" package, too:
        "hello": ["*.msg"],
    },

    # metadata to display on PyPI
    author="Me",
    author_email="[email protected]",
    description="This is an Example Package",
    keywords="hello world example examples",
    url="http://example.com/HelloWorld/",   # project home page, if any
    project_urls={
        "Bug Tracker": "https://bugs.example.com/HelloWorld/",
        "Documentation": "https://docs.example.com/HelloWorld/",
        "Source Code": "https://code.example.com/HelloWorld/",
    },
    classifiers=[
        "License :: OSI Approved :: Python Software Foundation License"
    ]

    # could also include long_description, download_url, etc.
)

下麵我們將解釋大多數這些setup() 參數的作用(元數據除外),以及在您自己的項目中使用它們的各種方式

指定項目的版本

官方的劃分比較多,簡潔的說一下:

版本:發行號+標簽(交替出現)

發行號:2.1.0 (簡單理解格式)

標簽:類似alpha,beta, a,c,dev等,例如:一個不穩定的預發行版本,建議:2.1.0.a9,如果需要加入日期建議使用-,例如:2.1.0.9-20190604

可以使用該pkg_resources.parse_version()功能比較不同的版本號:

>>> from pkg_resources import parse_version
>>> parse_version("1.9.a.dev") == parse_version("1.9a0dev")
True
>>> parse_version("2.1-rc2") < parse_version("2.1")
True
>>> parse_version("0.6a9dev-r41475") < parse_version("0.6a9")
True

新增和更改的setup()關鍵字

include_package_data:如果設置為True,setuptools則表示將在MANIFEST.in文件指定的包目錄中自動包含找到的所有數據文件。

exclude_package_data:將包名稱映射到應該從包目錄中排除的全局模式列表的字典

package_data:字典將包名稱映射到全局模式列表。

zip_safe:一個布爾值(True或False)標誌,指定是否可以安全地安裝該項目並從zip文件運行該項目。如果未提供此參數,則bdist_egg每次構建雞蛋時,該命令將必須分析項目的所有內容以查找可能的問題。

install_requires:一個字元串或字元串列表,指定在安裝此版本時還需要安裝其他發行版。

entry_points:字典將入口點組名稱映射到定義入口點的字元串或字元串列表。

extras_require:字典將名稱“ extras”(項目的可選功能)映射到字元串或字元串列表的字典,用於指定必須安裝哪些其他發行版來支持這些功能。

python_requires:python版本設置。

版本號大於等於3.3,但是不能超過4
python_requires='~=3.3',
支持2.6 2.7以及所有以3.3開頭的Python 3版本
python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, <4',

setup_requires:安裝腳本執行時需要依賴的分發包,主要用於構建過程,註意,這裡列出的包不會自動安裝,如果需要,同時要在install_requires中指定。

dependency_links:滿足依賴性時要搜索的URL的字元串列表

namespace_packages:命名項目的“命名空間包”的字元串列表

包括數據文件

對包含的文件進行更細粒度的控制(例如,如果您的軟體包目錄中有文檔文件,並希望將其排除在安裝範圍之外),則還可以使用package_data關鍵字

setup.py
src/
    mypkg/
        __init__.py
        mypkg.txt
        data/
            somefile.dat
            otherdata.dat
from setuptools import setup, find_packages
setup(
    ...
    packages=find_packages("src"),  # include all packages under src
    package_dir={"": "src"},   # tell distutils packages are under src

    package_data={
        # If any package contains *.txt files, include them:
        "": ["*.txt"],
        # And include any *.dat files found in the "data" subdirectory
        # of the "mypkg" package, also:
        "mypkg": ["data/*.dat"],
    }
)

如果想去掉readm.md等文件:

from setuptools import setup, find_packages
setup(
    ...
    packages=find_packages("src"),  # include all packages under src
    package_dir={"": "src"},   # tell distutils packages are under src

    include_package_data=True,    # include everything in source control

    # ...but exclude README.txt from all packages
    exclude_package_data={"": ["README.txt"]},
)

參考示例

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

from setuptools import setup, find_packages

"""
setuptools使用文檔: https://setuptools.readthedocs.io/en/latest/setuptools.html

生成源碼發佈包, 在靈犀工程目錄(LingXi/)下執行: python3 setup.py sdist
"""

setup(
    name="LingXi",
    version="1.5.0",  # 發佈前註意將此處改為本次發佈的版本號
    packages=find_packages(),

    # Project uses reStructuredText, so ensure that the docutils get
    # installed or upgraded on the target machine
    # install_requires=['docutils>=0.3'],

    package_data={
        # If any package contains *.txt or *.rst files, include them:
        '': ['*.txt', '*.otf', '*.ttc', '*.sh', '*.css', '*.js', '*.ttf', '*.eot', '*.svg', '*.woff'],
        'perception': ['templates/*',
                       'blocks/econet/*.yaml',
                       'compiled/Makefile',
                       'compiled/center_net/_cpools/src/*.cpp', 'compiled/center_net/_nms/*.c',
                       'compiled/center_net/_nms//pointer/resnet50/*',
                       'modules/meter_recognition_v2/cfgs/*',
                       'modules/meter_recognition_v2/cfgs/resnet50/*',
                       ],
        'services': ['*.sh',
                     'lingxi/static/js/*.js', 'lingxi/static/audio/*.wav',
                     'lingxi/static/docs/*.pdf', 'lingxi/static/imgs/*.jpg',
                     'lingxi/static/*.html', 'lingxi/templates/*.html',
                     'lingxi/static/*.css', 'lingxi/static/*.ico']
    },

    # metadata to display on PyPI
    author="",
    author_email="",
    maintainer="",
    maintainer_email="{dzp, gy, xkk}@kilox.cn",
    description="分析系統",
    keywords="",
    url="",
    license="GPLv3",
    platforms="UNIX",
    long_description="README.md, CHANGELOG.md, LICENSE",
    install_requires=['opencv-python', 'numpy', 'Pillow', 'six', 'torch', 'pytz', 'waitress', 'wtforms', 'flask',
                      'torchvision', 'termcolor', 'scipy', 'matplotlib', 'imageio', 'requests', 'soundfile', 'librosa',
                      'face_recognition', 'scikit-image', 'imutils', 'tensorflow', 'mmcv', 'pycocotools', 'tabulate',
                      'psutil', 'py-cpuinfo', 'PyYAML', 'fvcore']
)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.可以修飾類、變數、函數。 2.被final修飾的類不可以被繼承,為了避免被繼承,被子類覆寫功能。 3.被final修飾的方法不可以被覆寫。 4.被final修飾的變數是一個常量只能賦值一次,即可以修飾成員變數,又可以修飾局部變數。 在描述事物時,一些數據的出現值是固定的,那麼為了增強閱讀性,都給 ...
  • package com.io.homework; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileN ...
  • 一、FileReader詳解 1.java.io.Reader java.io.InputStreamReader;轉換流(位元組輸入流 >字元輸入流) java.io.FileReader​;文件字元輸入流 2.java.io.Writer java.io.OutputStreamWriter;轉換 ...
  • 對於feign的介面請求失敗的重試配置可通過如下自定義配置文件實現(一般不建議配置) 當然,也可使用預設的retry配置文件,下方是feign.Retryer的源碼 spring cloud中的feign整合了ribbon,但feign和ribbon都有重試功能,springcloud統一了兩者的行 ...
  • 開始我們的項目 飛機大戰 1 項目的初體驗 以及前期準備 1. 游戲初體驗畫面 2. 驗證一下本地第三方包有沒有導入 3. 開始搭建目錄結構 創建主程式 導入素材圖片,新建 名為:“飛機大戰‘項目 建立主程式員 ganme_main.py 把素材圖片都導入到項目文件夾中 4. 游戲的邏輯 主要的邏輯 ...
  • Java 轉換流:InputStreamReader & OutputStreamWriter package com.io.review; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
  • 代碼塊、緩存機制、深淺拷貝、集合 + id、is、== 1. id: 可類比為身份號,具有唯一性,若id 相同則為同一個數據。 2. is 判斷 id是否相同 (‘’==’‘判斷 值是否相同 ) ​ id相同,值一定相同,值相同,id不一定相同。 + 代碼塊:python的程式是由代碼塊構造的。塊是 ...
  • 之前我都是使用的IDEA自帶的工具來編譯jar包 但是增加了新的依賴,又得去修改project structure的依賴,過於麻煩 某天Android開發的時候,想到gradle可以一鍵打包,是不是maven也可以,百度一搜,便是找到了方法 Tornadofx作者開發了IDEA的項目創建工具,可以直 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...