distutils是 python 標準庫的一部分,2000年發佈。使用它可以進行 python 模塊的 安裝 和 發佈。html
distutils2 被設計爲 distutils 的替代品,後來這個計劃停滯了。python
setuptools
是一個爲了加強 distutils 而開發的集合,2004年發佈。它包含了 easy_install 這個工具。git
ez_setup.py
是 setuptools 的安裝工具。ez 是 easy 的縮寫。web
使用方式:服務器
easy_install requests
easy_install http://path/to/MyPackage-1.2.3.tgz
easy_install /path/to/MyPackage-1.2.3.egg
distribute 是 setuptools 的一個分支版本,後來又合併到了setuptools。網絡
pip 是目前 python 包管理的事實標準,2008年發佈。它被用做 easy_install 的替代品,可是它仍有大量的功能創建在 setuptools 組件之上。app
pip 但願再也不使用 Eggs 格式(雖然它支持 Eggs),而更但願採用「源碼發行版」(使用 python setup.py sdist 建立)。ide
pip使用方式:svn
requirments.txt
來實現依賴的安裝。setup.py
就是用來提供這些信息的。可是,並無規定你能夠從哪裏獲取這些依賴庫。pip install -r requirements.txt
來安裝。setup.py工具
from setuptools import setup setup( name="MyLibrary", version="1.0", install_requires=[ "requests", "bcrypt", ], # ... )
requirements.txt
# This is an implicit value, here for clarity --index https://pypi.python.org/simple/ MyPackage==1.0 requests==1.2.0 bcrypt==1.0.2
上面這個requirements.txt文件的頭部有一個 --index https://pypi.python.org/simple/
,通常若是你不用聲明這項,除非你使用的不是PyPI
。然而它倒是 requirements.txt
的一個重要部分, 這一行把一個抽象的依賴聲明 requests==1.2.0
轉變爲一個具體的依賴聲明 requests 1.2.0 from pypi.python.org/simple/
在 setup.py
中,也存在一個 install_requires
表來指定依賴的安裝。這一功能除去了依賴的抽象特性,直接把依賴的獲取url標在了setup.py裏。Link
from setuptools import setup setup( # ... dependency_links = [ "http://packages.example.com/snapshots/", "http://example2.com/p/bar-1.0.tar.gz", ], )
wheel 本質上是一個 zip 包格式,它使用 .whl 擴展名,用於 python 模塊的安裝,它的出現是爲了替代 Eggs。
wheel 還提供了一個 bdist_wheel
做爲 setuptools 的擴展命令,這個命令能夠用來生成 wheel 包。
pip 提供了一個 wheel 子命令來安裝 wheel 包。
setup.cfg
能夠用來定義 wheel 打包時候的相關信息。
Python Wheels 網站展現了使用 Wheels 發行的 python 模塊在 PyPI 上的佔有率。
.whl文件下載:http://www.lfd.uci.edu/~gohlke/pythonlibs/
安裝
打包
setuptools
to define projects and create Source Distributions.bdist_wheel
setuptools extension available from the wheel project to create wheels. This is especially beneficial, if your project contains binary extensions.twine
for uploading distributions to PyPI.Debian系的特殊路徑:Link
dist-packages instead of site-packages. Third party Python software installed from Debian packages goes into dist-packages, not site-packages. This is to reduce conflict between the system Python, and any from-source Python build you might install manually.
就是說從源代碼手動安裝,將使用site-packages
目錄。第三方python軟件安裝到dist-packages
目錄,這是爲了減小與操做系統版本的python的衝突,由於Debian系統的許多工具都依賴與系統版本的python。
>>> from distutils.sysconfig import get_python_lib >>> print(get_python_lib())