回来主页

从 Mac 下的包办理和装置东西说起

时刻:2018-11-05 22:05来历:manbetx万博官网网 www.fwnyp.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包办理和装置东西
------分隔线----------------------------
引荐内容
猜你感兴趣