很多著名的库,例如 poetry 虽然提供了 PyPi 包,但它们仍然推荐使用它们自身编写的安装脚本去安装。
这是为什么?
众所周知,使用 pip 命令默认是安装到系统的 python 环境里的。当你安装的包过多,总会遇到依赖冲突的事(如果没遇到,说明你很幸运)——一个库依赖于另一个库的 0.5 版本,而第三个库依赖于 1.2 版本,两个版本大相径庭完全无法兼容。就会导致你必须放弃一个。
而 poetry 等著名库的安装脚本会为你创建好虚拟环境,在虚拟环境中安装。看起来很美好,不过……对于新手而言,譬如我的几个朋友,他们对电脑没那么熟悉,如果你让他找 pip 安装的路径他们还算能勉强搞定。但这种对于他们来说像是黑魔法一样的脚本安装方式,卸载都是一件困难的事情。
其实这个问题的解决办法很简单,不再使用脚本安装。统统用 pipx 去安装。
pipx 是一个专门用于安装命令行工具的命令行工具。当然,折腾它的脚本安装方式也不是十分容易的事——如果你搞不明白 get-poetry.sh
的安装与卸载,那么肯定也对 pipx 的脚本安装与卸载迷迷糊糊的。
但这都不重要。直接使用系统的 pip
命令安装就好了。依赖冲突?除了 pipx 本身以外,其他命令行工具全部用 pipx 管理,这就解决了冲突问题。
pip install -U pipx
pipx 的原理十分简单易懂:在安装命令时,它自动创建一个虚拟环境,并把你需要安装的包安装进去,将包安装后产生的可执行文件暴露在环境变量里。它本身就是使用 Python 编写的,十分适合在在各种需要安装很多发布在 PyPi 的命令行工具的系统上使用。
而接下来这一步,会难倒很多不看程序输出、或者不看程序英文输出的人,尽管它已经在 pipx 安装之后被输出了。
在安装完 pipx 之后,你需要执行 pipx ensurepath
命令来确保 pipx 用以暴露可执行文件的文件夹被包含在环境变量里。注意:执行完这条命令后,你需要关闭控制台并重新启动一个新的,在原本那个控制台里,设置并不会生效。
接下来就可以愉快的使用 pipx 来管理你的命令行程序们了,以下是三个最常用的命令,分别是安装、卸载、升级和列举已安装的包和位置。
pipx install PACKAGE
pipx uninstall PACKAGE
pipx upgrade PACKAGE
pipx list
以下是我自己安装的命令行工具:
pipx install docker-compose
pipx install poetry
pipx install pipenv
pipx install certbot