非商業轉載,來自簡書-虞大膽的嘰嘰喳喳-傑作的:在Python中安裝包的三種方法 - 簡書
最近一段時間都在學習 Python3(如果你想部署 Python3 的開發環境,可參考《是時候配置一個Python3的開發環境了》),乘此機會重新回顧了 Python2 的相關知識,在 Python 中,如果想引入第三方包和庫,可以通過工具安裝,那么這些安裝工具背后做了什么是我非常關心的,這篇本文解釋了相關知識:
- Python 有多少種類型的包(Python 歷史實在太悠久了)。
- Python 包安裝工具有哪些。
- 安裝第三方包后,生成了哪些文件。
- 如何將 Python 代碼打包成一個包(要基於 Python 包管理工具),該主題不是本文重點。
下面這張圖簡單解釋了包之間的關系:
結構關系
- 開發者開發包需要遵循標准,然后發布到 Pypi 中,下一篇文章會描述。
- 包使用者可以使用多種工具從 Pypi 中下載包(本文的重點)。
- Pypi 包含 Meta 信息和源代碼倉庫。
在我學習 PHP 的時候,沒有一種很好的包安裝工具(現在可以使用 Composer),而 Python 在標准化方面做的更好。
再一次申明:
- 本文沒有在 Python 3 環境下測試。
- 本文知識點可能陳舊,比如 Python Pypi 官方已做了很大改變。
python 有多種類型的包工具
- Distutils:Python 標准的包管理工具,擴展性不夠。
- Setuptools:比 Distutils 提供了更多的功能,雖然不是官方的,但卻是事實上的標准。
- Distribute:是 Setuptools 的一個分支,目前已經退出了歷史舞台。
- Distutils2:又一個被廢棄的標准。
這些工具本來就是 Python 的一個包,如果開發者想編寫、發布一個包,必須基於這些包進行開發。
三種類型的包
- tar.gz
- egg
- whell
開發者可以基於 Distutils 或 Setuptools 生成這三種類型的包。
安裝包
(1)源碼安裝
可以手動下載第三方包,然后手動安裝。
# wget "https://files.pythonhosted.org/packages/96/66/43e6df87373557553be2b4343db27d008c6dcefa110ccff38cba1459ca07/ywdblogmath-0.1.tar.gz"
# tar xvf ywdblogmath-0.1.tar.gz
# cd ywdblogmath-0.1/
# python setup.py install
安裝或更新文件如下:
- /usr/local/lib/python2.7/dist-packages/easy-install.pth
- /usr/local/lib/python2.7/dist-packages/ywdblogmath-0.1-py2.7.egg
某些被安裝的包可能包含 C 代碼,所以需要 gcc 這樣的工具編譯。
(2)easy_install
如果想要使用 easy_install 安裝第三方包,需要先安裝 setuptools,如果本機沒有安裝,可以采用源碼方式安裝,比如:
https://pypi.org/project/setuptools/ 下載 .zip 包
# python setup.py install
easy_install 支持從 Pypi(tar.gz或egg包)、URL、本地目錄安裝軟件包:
# 從 Pypi 安裝最新的包,可能是 tar.gz 或 egg 包
$ easy_install ywdblogmath
# 安裝 tar.gz 類型的包
$ easy_install "https://files.pythonhosted.org/packages/96/66/43e6df87373557553be2b4343db27d008c6dcefa110ccff38cba1459ca07/ywdblogmath-0.1.tar.gz"
# 安裝 egg 包
# easy_install "https://files.pythonhosted.org/packages/b0/fe/1fef363672c1e179de61ff1519aed6a3d68200b4cad0536b6d96b08cc5e9/ywdblogmath-0.3-py2.7.egg"
# 本地目錄包含 ywdblogmath 的源碼
$ easy_install /root/python
如果安裝的是一個 tar.gz 或 egg 的壓縮包,安裝后會出現相關文件,如下:
- /usr/local/lib/python2.7/dist-packages/easy-install.pth(文件更新)
- /usr/local/lib/python2.7/dist-packages/ywdblogmath-0.1-py2.7.egg(文件新增)
特別說明:
- easy_install 只能安裝包,不能卸載包。
- easy_install 不能安裝 wheel 格式的包(pip 可以,但 pip 不能安裝 egg 格式的包)
(3)pip
如果本機沒有安裝 pip,可以使用 easy_install 工具安裝。
pip 常用命令:
# pip list
# pip install ywdblogmath
# pip install ywdblogmath -U
# pip show ywdblogmath
安裝 tar.gz 包:
$ pip install "https://files.pythonhosted.org/packages/96/66/43e6df87373557553be2b4343db27d008c6dcefa110ccff38cba1459ca07/ywdblogmath-0.1.tar.gz"
安裝后會出現相關文件,如下:
- /usr/local/lib/python2.7/dist-packages/ywdblogmath(新增目錄)
- /usr/local/lib/python2.7/dist-packages/ywdblogmath-0.1-py2.7.egg-info(新增文件)
安裝 wheel 包:
$ pip install "https://files.pythonhosted.org/packages/5f/ca/6624a4b42be2df78f51043d2282944e78dc939066a3da07dfdb949cd6d3e/ywdblogmath-0.4-py2-none-any.whl"
安裝后會出現相關文件,如下:
- /usr/local/lib/python2.7/dist-packages/ywdblogmath (新增目錄)
- /usr/local/lib/python2.7/dist-packages/ywdblogmath-0.4.dist-info(新增文件)