很多著名的库 ,例如 poetry 虽然提供了 PyPi 包 ,但它们仍然推荐使用它们自身编写的安装脚本去安装 。
这是为什么?
众所周知 ,使用 pip 命令默认是安装到系统的 python 环境里的 。当你安装的包过多 ,总会遇到依赖冲突的事 (如果没遇到 ,说明你很幸运) ——一个库依赖于另一个库的 0.5 版本 ,而第三个库依赖于 1.2 版本 ,两个版本大相径庭完全无法兼容 。就会导致你必须放弃一个 。
而 poetry 等著名库的安装脚本会为你创建好虚拟环境 ,在虚拟环境中安装 。看起来很美好 ,不过……对于新手而言 ,譬如我的几个朋友 ,他们对电脑没那么熟悉 ,如果你让他找 pip 安装的路径他们还算能勉强搞定 。但这种对于他们来说像是黑魔法一样的脚本安装方式 ,卸载都是一件困难的事情 。
其实这个问题的解决办法很简单 ,不再使用脚本安装 。统统用 pipx 去安装 。
pipx 是一个专门用于安装命令行工具的命令行工具 。当然 ,折腾它的脚本安装方式也不是十分容易的事——如果你搞不明白 get-poetry.sh
的安装与卸载 ,那么肯定也对 pipx 的脚本安装与卸载迷迷糊糊的 。
但这都不重要 。直接使用系统的 pip
命令安装就好了 。依赖冲突? 除了 pipx 本身以外 ,其他命令行工具全部用 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