python setuptools 學習


轉載一個操作的例子: https://www.cnblogs.com/anliven/p/9840583.html

 

太多了,直接官網看介紹吧

下載和官網: https://pypi.org/project/setuptools/

文檔:https://setuptools.readthedocs.io/en/latest/

另外一個沒使用: https://pypi.org/project/setuptools-scm/

Setuptools是Python的增強功能集合distutils ,允許開發人員更輕松地構建和分發Python包,尤其是那些依賴於其他包的包。

使用setuptools基於的普通Python包對用戶進行構建和分發的包distutils。您的用戶無需安裝甚至不需要了解setuptools即可使用它們,並且您不必在發行版中包含整個setuptools包。通過僅包含一個引導程序模塊(12K .py文件),setuptools如果用戶從源代碼構建程序包並且尚未安裝合適的版本,則程序包將自動下載並安裝。

特色亮點:

  • 使用EasyInstall工具在構建時自動查找/下載/安裝/升級依賴項,該工具支持通過HTTP,FTP,Subversion和SourceForge進行下載,並自動掃描從PyPI鏈接的網頁以查找下載鏈接。(這是目前最適合Python的CPAN。)
  • 創建Python Eggs - 單文件可導入的分發格式
  • 增強了對訪問壓縮包中托管的數據文件的支持。
  • 自動包含源樹中的所有包,而不在setup.py中單獨列出它們
  • 自動包含源分發中的所有相關文件,無需創建MANIFEST.in文件,也無需MANIFEST在源樹更改時強制重新生成文件。
  • 自動為項目中的任意數量的“主要”功能生成包裝器腳本或Windows(控制台和GUI).exe文件。(注意:這不是py2exe替換; .exe文件依賴於本地Python安裝。)
  • 透明的Cython支持,這樣你的setup.py可以列出.pyx文件,即使最終用戶沒有安裝Cython也可以工作(只要你在源代碼發行版中包含Cython生成的C)
  • 命令別名 - 為常用命令和選項創建項目特定,每用戶或站點范圍的快捷方式名稱
  • 以“開發模式”部署項目,使其可用 sys.path,但仍可直接從其源檢出中進行編輯。
  • 使用新命令或setup()參數輕松擴展distutils ,並為多個項目分發/重用擴展,而無需復制代碼。
  • 使用項目設置腳本中聲明的簡單“入口點”,創建可自動發現擴展的可擴展應用程序和框架。
  • 完全支持PEP 420 via find_namespace_packages(),它也向后兼容find_packages()Python> = 3.3 的現有版本。

基本用法

對於setuptools的基本使用,只需從setuptools而不是distutils導入東西。這是使用setuptools的最小設置腳本:

  1.  
    from setuptools import setup, find_packages
  2.  
    setup(
  3.  
    name="HelloWorld",
  4.  
    version="0.1",
  5.  
    packages=find_packages(),
  6.  
    )

調用該腳本以生成分發,並自動包含setup.py所在目錄中的所有包。請參閱下面的“ 命令參考”部分,了解可以為此安裝腳本提供的命令。例如,要生成源代碼分發,只需調用:

python setup.py sdist

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

setup()添加或更改 以下關鍵字參數setuptools。所有這些都是可選的; 除非您需要相關setuptools功能,否則不必提供它們。

include_package_data

如果設置為True,則告訴setuptools它自動包含它在您的MANIFEST.in文件指定的包目錄中找到的任何數據文件。有關更多信息,請參閱下面有關包含數據文件的部分 。

exclude_package_data

將包名稱映射到應從包目錄中排除的glob模式列表的字典。您可以使用它來修剪包含的任何多余文件include_package_data。有關完整說明和示例,請參閱下面有關包含數據文件的部分。

package_data

將包名稱映射到glob模式列表的字典。有關完整說明和示例,請參閱下面有關包含數據文件的部分。如果您正在使用include_package_data,則不需要使用此選項 ,除非您需要添加由安裝腳本和構建過程生成的文件。(因此不在源代碼管理中,或者是您不希望包含在源代碼分發中的文件。)

zip_safe

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

install_requires

一個字符串或字符串列表,指定在此時需要安裝的其他發行版。有關此參數格式的詳細信息和示例,請參閱下面有關聲明依賴關系的部分。

entry_points

將入口點組名稱映射到字符串或定義入口點的字符串列表的字典。入口點用於支持項目提供的服務或插件的動態發現。有關此參數格式的詳細信息和示例,請參閱服務和插件的動態發現。此外,此關鍵字用於支持自動腳本創建

extras_require

將“extras”(項目的可選功能)的名稱映射到字符串或字符串列表的字典,指定必須安裝哪些其他發行版才能支持這些功能。有關此參數格式的詳細信息和示例,請參閱下面有關聲明依賴關系的部分。

python_requires

對應於Python版本的版本說明符(如PEP 440中所定義)的字符串,用於指定PEP 345中定義的Requires-Python。

setup_requires

字符串或字符串列表,指定需要存在的其他分發以便運行安裝腳本。 在處理其余的安裝腳本或命令之前,setuptools將嘗試獲取這些(甚至可以下載它們 EasyInstall)。如果您在構建過程中使用distutils擴展,則需要此參數; 例如,處理setup()參數並將它們轉換為EGG-INFO元數據文件的擴展。

(注意:列出的項目setup_requires不會自動安裝在運行安裝腳本的系統上。如果它們本地不可用,則只需將它們下載到./.egs目錄。如果要安裝它們,以及在運行安裝腳本時可用,您應該將它們添加到install_requires 和 setup_requires。)

dependency_links

在滿足依賴關系時命名要搜索的URL的字符串列表。如果需要安裝由setup_requires或指定的包,將使用這些鏈接tests_require。它們也將被寫入egg的元數據,供EasyInstall等工具在安裝.egg文件時使用。

namespace_packages

命名項目“命名空間包”的字符串列表。命名空間包是可以跨多個項目分發拆分的包。例如,Zope 3的zope包是一個名稱空間包,因為子包類似zope.interface並且zope.publisher 可以單獨分發。雞蛋運行時系統可以這樣子包自動合並成在運行一個父包,只要您在包含命名空間封裝的任何子包每個項目申報他們,只要命名空間封裝的__init__.py 不包含比其他任何代碼名稱空間聲明 有關更多信息,請參閱下面有關命名空間包的部分。

test_suite

一個字符串,用於命名unittest.TestCase子類(或包含其中一個或多個的包或模塊,或此類子類的方法),或命名一個可以不帶參數調用的函數並返回一個 unittest.TestSuite。如果命名套件是一個模塊,並且模塊有一個additional_tests()函數,則調用它並將結果添加到要運行的測試中。如果命名套件是一個包,則任何子模塊和子包都以遞歸方式添加到整個測試套件中。

指定此參數可以使用test命令運行指定的測試套件,例如通過。有關詳細信息,請參閱下面的測試命令部分 。setup.py test

tests_require

如果項目的測試需要一個或多個附加軟件包,除了安裝它們之外,還可以使用此選項來指定它們。它應該是一個字符串或字符串列表,指定要運行的包測試需要提供的其他發行版。當您運行該test 命令時,setuptools將嘗試獲取這些命令(甚至可以使用它來下載它們EasyInstall)。請注意,這些必需的項目不會安裝在運行測試的系統上,但只有在本地尚未安裝的情況下才會下載到項目的安裝目錄中。

test_loader

如果您想使用與setuptools通常使用的不同的查找運行方式,可以在此參數中指定模塊名稱和類名稱。命名類必須是可實例化的,不帶參數,並且其實例必須支持loadTestsFromNames()Python unittest模塊TestLoader類中定義的方法。Setuptools只會在names參數中傳遞一個測試“name” :為參數提供的值test_suite。您指定的加載器可以以任何方式解釋此字符串,因為對test_suite字符串中可能包含的內容沒有限制。

模塊名稱和類名必須用a分隔:。該參數的默認值為"setuptools.command.test:ScanningLoader"。如果要使用默認unittest行為,則可以指定 "unittest:TestLoader"test_loader參數。這將阻止子模塊和子包的自動掃描。

您在此處指定的模塊和類可能包含在另一個包中,只要您使用該tests_require選項以確保在test運行該命令時包含加載程序類的包可用。

eager_resources

應該一起提取的命名資源的字符串列表,如果需要它們中的任何一個,或者是否導入了項目中包含的任何C擴展。僅當項目將作為zip文件安裝時,此參數才有用,並且需要將所有列出的資源作為一個單元提取到文件系統。此處列出的資源應為'/' - 相對於源根的分隔路徑,因此要foo.png在包中列出資源bar.baz,您應bar/baz/foo.png在此參數中包含該字符串 。

如果您只需要一次獲取一個資源,或者您沒有任何C擴展來訪問項目中的其他文件(例如數據文件或共享庫),您可能不需要這個參數而且不應該弄亂用它。有關此參數如何工作的更多詳細信息,請參閱下面有關自動資源提取的部分。

use_2to3

在構建過程中,使用2to3將源代碼從Python 2轉換為Python 3。有關更多詳細信息,請參閱使用Setuptools支持Python 2和Python 3

convert_2to3_doctests

需要使用2to3轉換的doctest源文件列表。有關更多詳細信息,請參閱使用Setuptools支持Python 2和Python 3

use_2to3_fixers

用於搜索在2to3轉換期間使用的其他修復程序的模塊列表。有關更多詳細信息,請參閱使用Setuptools支持Python 2和Python 3

project_urls

URL名稱到超鏈接的任意映射,允許更多可擴展的文檔記錄可以找到的各種資源,而不是簡單 urldownload_url選項。

使用find_packages()

對於簡單的項目,通常很容易手動將包添加到packages參數中setup()。但是,對於非常大的項目(Twisted,PEAK,Zope,Chandler等),保持包列表更新可能是一個很大的負擔。這setuptools.find_packages()是為了什么。

find_packages()獲取源目錄和兩個包名稱模式列表以排除和包含。如果省略,源目錄默認為與安裝腳本相同的目錄。有些項目使用srclib 目錄作為源樹的根,這些項目當然會使用"src""lib"作為第一個參數find_packages()。(而且這些項目也需要類似於package_dir={'':'src'}他們的 setup()論點,但這只是一個正常的事情。)

無論如何,find_packages()遍歷目標目錄,按包含模式過濾,並找到Python包(任何目錄)。只有包含__init__.py文件時才會識別包。最后,應用排除模式來刪除匹配的包。

包含和排除模式是包名稱,可選地包括通配符。例如,find_packages(exclude=["*.tests"])將排除其姓氏為的所有包tests。或者,也將排除所有已命名的軟件包子包,但它仍然不會排除頂級軟件包或其子代。事實上,如果你真的不想要任何包,你需要這樣的東西:find_packages(exclude=["*.tests", "*.tests.*"])teststeststests

find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM