<em id="pj4oa"><acronym id="pj4oa"></acronym></em><button id="pj4oa"><object id="pj4oa"></object></button>
<progress id="pj4oa"><track id="pj4oa"><rt id="pj4oa"></rt></track></progress>

    <dd id="pj4oa"></dd>
    <th id="pj4oa"></th>

    返回首頁
    當前位置: 主頁 > Windows教程 > Mac教程 >

    從 Mac 下的包管理和安裝工具說起

    時間:2018-11-05 22:05來源:Office教程學習網 www.tin22.com編輯:麥田守望者

    可能很多人和我一樣,最開始習慣使用的是 Windows,后來開始接觸 Linux,再后來,接觸到 Mac,幾周以后,一發不可收拾。

    如果說,在 Windows 下面,基本上習慣了便捷友好的圖形化界面,以及經歷了對“系統在干什么”一無所知的恐懼之后,那么接下來 Linux 就帶來了另一個極端的體驗,知道系統在做什么,但是總是覺得不那么便捷而友好(剛開始很長一段時間都沒有接觸 Linux 圖形界面)。我記得大致有這么一句話,“Linux is user friendly, but it is selective who its friends are.”,Linux 也是對用戶朋友友好的,只不過對誰是它的朋友比較挑剔。既霸氣,又高傲是不是?于是 Linux 黨和 Windows 黨見面就掐。

    好,Mac 時間到了——既能夠體會到便捷和友好(有過之無不及),又能夠讓我清楚地知道操作系統在干什么,和 Linux 的同源又可以帶來系統和應用管理的親切感。這也是我覺得為什么程序員的開發環境已經從若干年前的 Windows 一統天下到現在大部分被 Mac 蠶食的一個最主要原因。

    如果你和我一樣,先接觸的 Linux,再遷移到 Mac,可能會在第一時間去尋找類似于 Linx 上的包安裝管理工具。比如說 rpm(for Redhat,如果是 Debian 那會是 dpkg)。不過和 rpm 相比,Yum 會是更有名的那一個,包倉庫、依賴管理等等都被引入(如果是 Debian 的話 apt-get 是類似的)。下圖來自 這篇 文章。

    之后就知道了大名鼎鼎的 Homebrew。它是 Mac 上包管理工具毫無疑問的老大。簡潔,清晰,使用方便,而且有很多實用的功能。比如“brew doctor”,幫忙修正一些潛在的問題,比如這樣的,連解決方法都給出了:

    Warning: The following directories are not writable:
    /usr/local/bin
    /usr/local/lib
    
    This can happen if you "sudo make install" software that isn't managed
    by Homebrew. If a formula tries to write a file to this directory, the
    install will fail during the link step.
    
    You should change the ownership of these directories to your account.
     sudo chown -R $(whoami) /usr/local/bin /usr/local/lib

    還有這樣的,連問題單鏈接都附上了:

    Warning: A .pydistutils.cfg file was found in $HOME, which may cause Python
    builds to fail. See:
    https://bugs.python.org/issue6138
    https://bugs.python.org/issue4655

    但是,和很多 Linux 版本上的包管理工具不同的是,它是有同級別的競爭對手的——它就是 MacPorts。功能上,二者類似

    安裝上面,由于 Homebrew 是 Ruby 寫的,而 Ruby 已經在 Mac 上預裝了,因此安裝一行命令就搞定了:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    反觀 MacPorts(據說有著最多的包),是用 C 和 TCL 寫的,得下載 pkg 包,然后再自行安裝(好像更像 Windows 一點)。它和 Homebrew 比起來,把所有的依賴包都重新下載到本地,而不是重用系統中已有的庫——這有利有弊,好的一面是不容易發生沖突,也不容易發生一些庫本身不可靠帶來的亂七八糟的問題,壞的一面是這些庫要重下,慢而且占用更多空間。

    題外話,偶然看到 Stack Overflow 上面有人支持 MacPorts 的時候,吐槽了一下 Homebrew,哈哈:

    Rubists like to rewrite everything in Ruby, because the only thing they are at ease is Ruby itself.

    Mac 上的最后一個,我也是才知道的,fink。它對于 Debian 上過來的用戶親和力是最好的,可以下載預編譯好的二進制包,也可以在 Mac 上現做現賣,從源代碼編譯開始。

    上面說的都是基于某個操作系統的包安裝管理工具,其實還有一些別的維度下的包安裝管理工具。比如基于某種編程語言的包安裝管理工具。

    在 JavaScript 的世界里最常用的是 NPM。事實上,不管是外界的什么工具,在 JavaScript 的世界里,總是能找到相應的一份。后來了解到了它的一個替代工具,叫做 Yarn,。有趣的是,似乎 JavaScript 社區內部要友善得多(跟“同源”有關系?),你可以通過 NPM 安裝 Yarn,看起來競爭對手其實也不是那么討厭對吧——錯了,你有本事通過 Homebrew 安裝 MacPorts 試試?

    Java 的話則是 Maven,而如同前面的劃分一樣,它的前身,也是沒有服務端功能的弱化版本是 Ant。印象中還用過一個 Gant,好幾年前寫過 一點點東西 。

    不過相較于這些,我倒想重點說說 Python 世界里的的 pip。

    說這個是因為最近跟 Python 干上了,項目的原因,我也是被迫 今年開始學的 Python。

    最近知道一個很有意思的事情,Google 的搜索指數上看,Python 已經成功登頂 了,可謂最火的語言:

    可是去傳統的 TIOBE 看看,哪有啊,勢頭不錯,但是距離登頂還遠著哪:

    其實誰都沒有問題,這里恰恰反映了一個有趣的事實,Python 未必是最流行和使用最廣泛的,但卻是特別需要”use the fucking Google” 的,或者說,有很多人在使用 Python 的時候,Google 一下去尋找某一個 Python 問題的解決方案。

    想起來我們的項目也多為 Python 完成,有的項目代碼規模還不小了,這里面五味雜陳。既有代碼簡潔、直接,執行容易,和 Linux 腳本親和度高的好處,也有從工程上看零零散散,缺乏有效規劃、組織、測試等等的問題。發自內心地感受,Python 是如此地便捷,可我依然不覺得 Python 是“正規軍”。隨著規模的增大 Python 代碼帶來的風險和 Java 之類的傳統貨比起來,還明顯讓人不放心。

    呃,抱歉……好像又扯遠了。

    現在回到 pip 上面。講到 pip 必須提一提 easy_install。pip 始于 2008 年,而 easy_install 始于 2004 年,二者的關系就如同 Yum 和 rpm 一樣,是后者的替代品,功能更強大,但最重要的一點是有了服務端的支持——對版本庫的支持和依賴的解決。下面這張表來自于 PyPA 的這個鏈接 。

    在實際項目中,我們把 Python 的包倉庫配置到公司內部的服務器,然后在需要的時候根據 requirements.txt 的內容下載依賴包:

    pip install -r requirements.txt

    一個更全面的執行過程是:

    virtualenv venv;
    source venv/bin/activate;
    pip install --trusted-host=artifactory.xxx.xxx -i https://artifactory.xxx.xxx/api/pypi/global-release-pypi/simple -U xoxo -r requirements.txt;

    其實,這些工具對于包的倉庫、依賴、沖突解決、依賴樹生成、版本比較、狀態遷移、本地替換等等功能支持得有強有弱(似乎多數包管理工具指支持到這個列表的倉庫和依賴,可能還加上簡單的狀態遷移,而其它的功能都不支持)。老實說,到現在為止我覺得最強的包管理工具還是 Amazon 內部的 Brazil(而且比其它強很多),很可惜它并不開源。關于這方面的機制,大有文章可做,以后有機會再講。

    ------分隔線----------------------------
    標簽(Tag):mac包管理和安裝工具
    ------分隔線----------------------------
    推薦內容
    猜你感興趣
    五月婷婷福利