python包管理工具他們之間的關系


python包管理工具之間的關系

 

現在的python包管理工具有很多,非常混亂,必須理清他們之間的關系才能更好的使用python構建強大的包關系系統工具。

 

首先:python官方推薦的第三方庫是PyPI:

PyPI(Python Package Index)python官方的第三方庫的倉庫,所有人都可以下載第三方庫或上傳自己開發的庫到PyPIPyPI推薦使用pip包管理器來下載第三方庫。

 

而這些包管理工具正是為了管理,安裝和發布這些常用的包而開發的,這些包管理工具的作用就是安裝,管理和發布python包,以及python的一些項目。

首先:

  1. distutilsdistutilspython自帶的基本安裝工具,應該說是第一代,應該比較早了,現在可能已經不用了,因為再linux下測試的時候,使用python setup.py install並不管用。他適用於非常簡單的場景,主要功能是:

為項目創建setup.py腳本 也就是說,你開發了一個項目或者包,那你得安裝或者發布吧,就可以執行這個腳本安裝和運行.

這樣執行python setup.py install即可安裝。

  1. setuptools: 針對distutils做了大量的擴展,尤其是加入了包依賴機制,這是因為之前那個distutils發布包的時候,只能發布自己獨立編寫的包,或者自己全部代碼編寫的項目文件,但是,在很多大的項目中,我們會經常使用一些其他的第三方包的功能,這時候我們再打包我們開發的這個項目文件,就必須使用setuptools了,這樣就沒必要再把一整套代碼拷貝過來寫上了,直接引用,等別人使用我們的項目或包文件的時候,直接一起下載一起引用使用即可。可以這么說,setuptools,因為這一點功能,非常有用,已經事實上成了很多的包開發管理發布的標准,只要我們想安裝別人開發的大項目,就可能必須安裝使用setuptools,比如django等,在我們開發或者是發布我們自己的包和項目的時候,也可以使用setuptools,當然也可以使用其他的,而不使用setuptools

經過上面的兩個對比,我們發現其實distutils基本上就沒什么用,可以不用,我們直接使用setuptools即可,這也是distutils使用比較少,而setuptools使用比較多的根本原因。

 

  1. distributedistribute在英文中的意思是發布的意思,這個也是一個python發布和管理,及安裝使用python包的管理工具,他的出現是因為setuptools開發進度緩慢,不支持python3,而且可能是因為一開始大家剛開始開發的setuptools,項目經驗不足,導致setuptools代碼比較混亂,這個時候,一些其他的工程師就想再開發一套包管理工具,對setuptools重構一下,完善一下代碼,添加一些新功能,並且好好的組織一下代碼,並希望將來能取代setuptools並被接納成為官方標准的庫,可能他們很努力,很快就讓社區接受了distribute這個包管理工具。

但是distribute最終未能納入python官方標准庫, Guido 也就python語言的開發發明者並未接納 distribute 為官方標准,並說明了原因,可能是會跟原來的distutils有沖突,或者distutils必須存在,而且如果更改的話會導致python編輯器代碼比較混亂或者代碼量很大的原因吧,最終distribute沒有被接納入python的標准庫。、

 

  1. 使用setuptools或者distribute安裝python包。

因為我們的setuptooldistribute軟件包管理工具都是基於distutils包管理工具來開發的,所以說只要是我們下載了一個包,只要他是distutils,或者是setuptools,或者是distribute構建開發發布的,那么他很肯定會帶有一個setup.py腳本文件,我們就可以直接使用

python setup.py install命令安裝我們下載的python項目或包。

5.easy_install安裝命令:

因為我們的包都是安裝放在官方的PyPI倉庫中的,所以,setuptoolsdistribute直接開發了一個自動搜索並安裝包的工具easy_install,這個是setuptoolsdistribute自帶的安裝腳本,也就是說一旦setuptoolsdistribute安裝完畢,easy_install即可使用,最大的特點是自動在python官方維護的包源PyPI搜索想安裝的軟件包及他所依賴的軟件包,類似於yum,使用easy_install安裝第三方python包非常方便,使用命令如下:

easy_install 包名  

setuptools / distribute 都只是擴展了 distutils,這個命令將自動從 PyPI 查找/下載/安裝指定的包。

6.pip包安裝命令

pip包安裝命令的出現非常明確,就是為了取代easy_install安裝命令,easy_install安裝命令有很多不足,安裝事物是非原子性操作,也就是安裝包的時候只能一下安裝所有的包及其依賴,想單獨安裝其中的某一個包則不行,而且他只支持svn,並且沒有卸載包的命令,用起來非常麻煩,安裝一系列的相關依賴包或者是安裝一個單獨的包還可以,但是如果想安裝一些列不相關的沒什么依賴的包就非常麻煩,而且需要寫腳本。pip正好解決了上面的問題,事實上已經成為了一個安裝包命令的一個標准。又因為,linux系統python版本混亂,pip正好和virtualenv一起很好的解決這個問題,也就是說virtualenvpip是一個在linux系統上使用python及配置python環境及管理python安裝包的好搭檔。

pip基本命令:

安裝包:pip install 包名

卸載包:pip uninstall 包名

而且pip支持能夠從通過任意包管理系統,如git,PyPI,svn或者其他一些包或版本管理工具系統,或者其他任意瀏覽器訪問到的地址安裝python包。

  1. distutils:本來一開始setuptoolsdistribute的誕生是因為distutils的功能不完善,進而開發出的想替代distutils的包管理工具,但是因為后來因為各種原因,未被python官方庫接納,也是因為官方想結束這些混亂,於是這些開發者和官方正打算一起開發一套結束這種混亂的包管理工具局面,於是一起開發除了distutils第二代包管理系統distutils2,他將成為python3.3的標准庫,並在以后的其他python3版本中正式使用,可以說他必定結合了setuptoolsdistribute以及第一代distutils的各種功能,並配合和pip包管理命令一同所謂python包管理的基本工具。

 

注意:我們在使用pip命令的時候,也必須安裝好setuptools或者是distribute,而distribute也是后來在setuptools的基礎上開發的,屬於setuptools的一個分支,故我們現在裝的setuptools實際上也就是distribute

 

上面我們已經基本理清了python各種包管理工具之間的關系,接下來我們將要安裝並使用一下這些包管理工具。

補充:參考:https://blog.zengrong.net/post/2169.html


免責聲明!

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



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