欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python打包分發(fā)工具setuptools

 更新時間:2019年08月05日 11:54:50   作者:云之澤  
這篇文章主要介紹了Python打包分發(fā)工具setuptools的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

Python打包分發(fā)工具setuptools:曾經 Python 的分發(fā)工具是 distutils,但它無法定義包之間的依賴關系。setuptools 則是它的增強版,能幫助我們更好的創(chuàng)建和分發(fā) Python 包,尤其是具有復雜依賴關系的包。其通過添加一個基本的依賴系統以及許多相關功能,彌補了該缺陷。他還提供了自動包查詢程序,用來自動獲取包之間的依賴關系,并完成這些包的安裝,大大降低了安裝各種包的難度,使之更加方便,將程序打包以后可以可以安裝到自己的虛擬環(huán)境中,也可以上傳到PyPI,這樣非常方便大項目開發(fā)

setuptools使用

pip 安裝:

$ pip install setuptools

第一個安裝文件 在目錄 learn_setup 下新建安裝文件 setup.py,然后創(chuàng)建包 myapp 模擬要打包源碼包:

├── myapp
│ └── __init__.py
└── setup.py

setup.py 文件內容如下:

from setuptools import setup
setup(
 name='firstApp001', # 應用名
 version='0.0.1', # 版本號
 packages=['myapp'], # 包括在安裝包內的 Python 包
)

使用安裝文件創(chuàng)建 wheel 有了上面的 setup.py 文件,我們就可以打出各種安裝包,主要分為兩類:sdist 和 bdist。 Source distribution 使用 sdist 可以打包成 source distribution,支持的壓縮格式有:


使用方式為:

$ python setup.py sdist --formats=gztar,zip

目錄下便會多出 dist 和 *.egg-info 目錄,dist 內保存了我們打好的包,上面命令使用 --formats 指定了打出 .tar.gz 和 .zip 包,如果不指定則如上表根據具體平臺默認格式打包。 包的名稱為 setup.py 中定義的 name, version以及指定的包格式,格式如:firstApp01-0.0.1.tar.gz。

Built distribution 使用 bdist 可以打出 built distribution,和源碼包相比,由于預先構建好,所以安裝更快:


使用上,和 sdist 一樣,可以使用 --formats 指定包格式。如:

$ python setup.py bdist --formats=rpm

同時為了簡化操作,setuptools 提供了如下命令:


所以上面打 rpm 包可以使用:

$ python setup.py bdist_rpm

Wheel Wheel 也是一種 built 包,而且是官方推薦的打包方式。也許你曾經遇見或使用過 egg 包,但現在wheel 是官方推薦的打包方式 使用 wheel 打包,首先要安裝 wheel:

$ pip install wheel

然后使用 bdist_wheel 打包:

$ python setup.py bdist_wheel

執(zhí)行成功后,目錄下除了 dist 和 *.egg-info 目錄外,還有一個 build 目錄用于存儲打包中間數據。 wheel 包的名稱如 firstApp01-0.0.1-py3-none-any.whl,其中 py3 指明只支持 Python3??梢允褂脜?--universal,包名如 mfirstApp-0.0.1-py2.py3-none-any.whl,表明 wheel 包同時支持 Python2 和 Python3使用 universal 也成為通用 wheel 包,反之稱為純 wheel 包。

安裝 Wheel 上一節(jié)的示例應用沒有任何內容。下面添加模塊 greet 并重新打包。

# one.py
def hello():
 print('Hello, welcome to setuptools!')

使用 bdist_wheel 再次打包后,我們可以使用 pip 安裝到本地 Python 的 site-packages 目錄。

$ pip install dist/fisrtApp001-0.0.1-py3-none-any.whl

現在和其他使用 pip 安裝的三方庫一樣使用:

from one.greet import hello
hello()

應用開發(fā)過程中會頻繁變更,每次安裝都需要先卸載舊版本很麻煩。使用 develop 開發(fā)模式安裝的話,實際代碼不會拷貝到 site-packages 下,而是除一個指向當前應用的鏈接(*.egg-link)。這樣當前位置的源碼改動就會馬上反映到 site-packages。使用如下

$ pip install -e .  # 或者 python setup.py develop

要是需要卸載,就使用pip uninstall 上傳 Wheel 到 PyPI Wheel 包可以自己使用和傳輸給其他人使用,但是維護更新不方便,而 PyPI 作為 Python 的 軟件倉庫,讓所有人可以方便的上傳和下載,以及管理三方庫。

注冊 PyPI 賬號 登錄 pypi.python.org/pypi,進入 Register 注冊賬號。

安裝 twine雖然 setuptools 支持使用 setup.py upload 上傳包文件到 PyPI,但只支持 HTTP 而被新的 twine 取代,同樣的,需要先安裝 twine:

$ pip install twine

使用 twine 上傳 使用 upload:

$ twine upload dist/*

輸入 username 和 password 即上傳至 PyPI。如果不想每次輸入賬號密碼,可以在家目錄下創(chuàng)建 .pypirc 文件,內容如下:

[distutils]
index-servers =
 pypi
 pypitest

[pypi]
username: 
password:

[pypitest]
repository: https://test.pypi.org/legacy/
username: 
password:

填上自己的賬號密碼即可,這里配置了官方的 pypi 和 pypitest,若要配置其他倉庫,按格式添加。回到 PyPI 主頁即可看到上傳的 firstApp001


setup() 參數

上面的 setup.py 安裝文件內,我們已經使用了 setup() 一些參數:name, version, packages。 version 項目版本號,一般由三部分組成:MAJOR, MINOR, MAINTENANCE。

  • MAJOR version when they make incompatible API changes,
  • MINOR version when they add functionality in a backwards-compatible manner, and
  • MAINTENANCE version when they make backwards-compatible bug fixes. 版本號的選擇參見: packaging.python.org/tutorials/d… packages:列出項目內需要被打包的所有 package。一般使用 setuptools.find_packages() 自動發(fā)現。
  • packages=find_packages(exclude=['contrib', 'docs', 'tests*'])
  • # exclude 用于排除不打包的 package

description:項目的簡短描述,一般一句話就好,會顯示在 PyPI 上名字下端。

description='My first Python project'

對項目的完整描述,使用 long_description。如果此字符串是 rst 格式的,PyPI 會自動渲染成 HTML 顯示。也可指定使用 markdown。

long_description=long_description,
long_description_content_type='text/x-rst'

url:通常為 GitHub上 的鏈接或者 readthedocs 的鏈接。

url='https://github.com/pypa/sampleproject'

author:作者信息

author='example',
author_email='example@example.com'

license:項目許可證

license='MIT'

關于各種許可證的介紹和選擇,參考:choosealicense.com/ classifiers:項目分類,完整可選項參考: pypi.python.org/pypi?%3Aact…

classifiers=[
 # How mature is this project? Common values are
 # 3 - Alpha
 # 4 - Beta
 # 5 - Production/Stable
 'Development Status :: 3 - Alpha',

 # Indicate who your project is intended for
 'Intended Audience :: Developers',
 'Topic :: Software Development :: Build Tools',

 # Pick your license as you wish (should match "license" above)
  'License :: OSI Approved :: MIT License',

 # Specify the Python versions you support here. In particular, ensure
 # that you indicate whether you support Python 2, Python 3 or both.
 'Programming Language :: Python :: 2',
 'Programming Language :: Python :: 2.6',
 'Programming Language :: Python :: 2.7',
 'Programming Language :: Python :: 3',
 'Programming Language :: Python :: 3.2',
 'Programming Language :: Python :: 3.3',
 'Programming Language :: Python :: 3.4',
],

keywords:項目關鍵詞列表

keywords='sample setuptools development'

project_urls:項目相關額外連接,如代碼倉庫,文檔地址等。

project_urls={
 'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/',
 'Funding': 'https://donate.pypi.org',
 'Say Thanks!': 'http://saythanks.io/to/example',
 'Source': 'https://github.com/pypa/sampleproject/',
 'Tracker': 'https://github.com/pypa/sampleproject/issues',
}

install_requires:項目依賴的 Python 庫,使用 pip 安裝本項目時會自動檢查和安裝依賴。

install_requires=['pyyaml']

依賴的安裝參考: packaging.python.org/discussions… python_requires:指定項目依賴的 Python 版本

python_requires='>=3'

package_data:項目依賴數據文件,數據文件必須放在項目目錄內且使用相對路徑

package_data={
 'myapp': ['data/*.yml'],
}

如果不指定作為目錄的鍵為空串,則代表對所有模塊操作(下例中將包含所有包內 data 目錄下的 yaml 文件):

package_data={
 '': ['data/*.yml'],
}

data_files:如果數據文件存在于項目外,則可以使用 data_files 參數或者 MANIFEST.in 文件進行管理。如果用于源碼包,則使用 MANIFEST.in;如果用于 wheel,則使用 data_files。

data_files=[(‘mydata', [‘data/conf.yml'])]

上述設置將在打包 wheel 時,將 data/conf.yml 文件添加至 mydata 目錄。(data_files 不能使用路徑通配符) 此外,scripts, py_modeles, entry_points, console_scripts 等參數參考: packaging.python.org/tutorials/d… 其他初始化文件 在閱讀 Github 上的 Python 庫時,除了最基本核心的 setup.py 文件和主程序之外,還會看到其他一些文件。本節(jié)將介紹它們的作用和使用方法。

setup.cfg 包含了構建時候的一些默認參數,如:

[bdist_wheel]
universal=1

用于在使用 bdist_wheel 的時候的默認設置 --universal 參數 。

README.rst/README.md:項目說明文檔,使用 reStrutruedText 可以在 PyPI 上很好的渲染,但 Markdown 則支持不夠好。

MANIFEST.in:此文件在打源碼包的時候告訴 setuptools 還需要額外打包哪些文件。

# Include the README
include *.md
# Include the license file
include LICENSE.txt
# Include the data files
recursive-include data *

LICENSE.txt:項目許可說明文件 setuptools 默認打包的文件:README.rst/README.md、setup.cfg、MANIFEST.in 所以其他的文件,如 LICENSE.txt,在源碼包時需要手動在 MANIFEST.in 里添加 include,在 wheel 包時需要在 setup.cfg 添加:

[metadata]
license_file = LICENSE.txt


PyPI 上傳推薦配置

setup.py 
name
version
author
author_email
url
packages
description
package_data/data_files
setup.cfg
MANIFEST.in
README.rst
LICENSE.txt
<項目>

官網例子參考:

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="me@example.com",
 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.
)

參考: setuptools.readthedocs.io/en/latest/s…

總結

以上所述是小編給大家介紹的Python打包分發(fā)工具setuptools,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • python基礎之set集合詳解

    python基礎之set集合詳解

    這篇文章主要介紹了python基礎之set集合詳解,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Python只用40行代碼編寫的計算器實例

    Python只用40行代碼編寫的計算器實例

    這篇文章主要介紹了Python只用40行代碼編寫的計算器,結合完整實例形式分析了Python計算器的具體實現技巧,需要的朋友可以參考下
    2017-05-05
  • 13個簡便高效的Python腳本分享

    13個簡便高效的Python腳本分享

    Python是頂級編程語言之一,它具有許多程序員從未使用過的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過的13個Python腳本,感興趣的可以學習一下
    2023-01-01
  • 修復Python?Pandas數據標記錯誤的幾種方法總結

    修復Python?Pandas數據標記錯誤的幾種方法總結

    用于分析數據的?Python?庫稱為?Pandas,在?Pandas?中讀取數據最常見的方式是通過?CSV?文件,但?CSV?文件的限制是它應該采用特定的格式,否則在標記數據時會拋出錯誤,在本文中,我們將討論修復?Python?Pandas?錯誤標記數據的各種方法
    2023-10-10
  • Python實現簡單過濾文本段的方法

    Python實現簡單過濾文本段的方法

    這篇文章主要介紹了Python實現簡單過濾文本段的方法,涉及Python針對文本的讀取及字符串遍歷、判斷、打印等相關操作技巧,需要的朋友可以參考下
    2017-05-05
  • 復化梯形求積分實例——用Python進行數值計算

    復化梯形求積分實例——用Python進行數值計算

    今天小編就為大家分享一篇復化梯形求積分實例——用Python進行數值計算,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python使用正則表達式匹配txt特定字符串(有換行)

    python使用正則表達式匹配txt特定字符串(有換行)

    這篇文章主要給大家介紹了關于python使用正則表達式匹配txt特定字符串的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Python通過tkinter實現百度搜索的示例代碼

    Python通過tkinter實現百度搜索的示例代碼

    這篇文章主要介紹了Python通過tkinter實現百度搜索的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python?Fire中兩種命令行參數靈活設置方式詳解

    Python?Fire中兩種命令行參數靈活設置方式詳解

    Python的Fire庫,一個用來生成命令行工具的的庫,這篇文章主要針對命令行參數,補充兩種更加靈活的設置方式,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • python 實現非極大值抑制算法(Non-maximum suppression, NMS)

    python 實現非極大值抑制算法(Non-maximum suppression, NMS)

    這篇文章主要介紹了python 如何實現非極大值抑制算法(Non-maximum suppression, NMS),幫助大家更好的進行機器學習,感興趣的朋友可以了解下
    2020-10-10

最新評論