起因
在运用 Python 的过程中,我们不仅会使用丰富的 Python package,也会发现很多有用的工具,如:环境管理工具 pipenv,SQL 命令行客户端 mycli,下载工具 you-get 等。虽然 python 自带的 pip 工具为我们提供了丰富的安装与管理功能,同时在 virtualenv 的帮助下,我们并不是太担心 Python 的版本升级会对我们的开发环境产生太大的影响。但是,我们通过 pip 安装的 Python 实用工具,在版本升级的过程中并不能幸免。除非我们单独设置独立的,专门用于安装这些工具的虚拟环境。但是,么次安装都需要切换到虚拟环境,未免显得过于繁琐。难道就不能更给力一些嘛~~答案当然是肯定的。pipx 就是为了解决这样的困扰而诞生的。
首先来看一个例子

有没觉得如此简单的,就像我们通过 pip,pipenv 等安装 package 一样简洁明了。同时 pipx 会为我们自动构建用于工具运行的虚拟环境,再也不用担心随着 Python 大版本的升级导致的工具丢失了。
安装
MacOS 可以通过 Howbrew 来安装
brew install pipx
# 将 pipx 虚拟环境下的 $PATH 加入到系统中
pipx ensurepathWindows 可以通过 Scoop 来安装
scoop bucket add pipx-standalone https://github.com/uranusjr/pipx-standalone.git
scoop install pipx
pipx ensurepathLinux 可以通过各发行版的包管理器来安装,这里以 Ubuntu 为例
sudo apt-get update
sudo apt-get install python-pipx
# 将 pipx 虚拟环境下的 $PATH 加入到系统中
pipx ensurepath使用
使用 pipx 非常简单! 安装需要的 Python 工具只需要运行如下命令即可
pipx install [PACKAGE-NAME]查看目前安装了哪些工具包
pipx list甚至可以不进行安装,直接在 pipx 所管理的虚拟环境中运行 Python 开发的 CLI 工具,便于快速测试工具
pipx run pycowsay moooo!进阶
pipx 同时提供很多扩展功能,可以通过运行 pipx --help 来进行查看
$ pipx --help
usage: pipx [-h] [--version]
{install,inject,upgrade,upgrade-all,uninstall,uninstall-all,reinstall-all,list,run,runpip,ensurepath,completions}
...
Install and execute apps from Python packages.
Binaries can either be installed globally into isolated Virtual Environments
or run directly in an temporary Virtual Environment.
Virtual Environment location is ~/work/pipx/pipx/"/opt/pipx"/venvs.
Symlinks to apps are placed in ~/work/pipx/pipx/"/opt/pipx_bin".
Optional Environment Variables:
PIPX_HOME: Overrides default pipx location. Virtual Environments
will be installed to $PIPX_HOME/venvs.
PIPX_BIN_DIR: Overrides location of app installations. Apps are symlinked
or copied here.
USE_EMOJI: Override emoji behavior. Default value varies based on platform.
PIPX_DEFAULT_PYTHON: Overrides default python used for commands.
optional arguments:
-h, --help show this help message and exit
--version Print version and exit
subcommands:
Get help for commands with pipx COMMAND --help
{install,inject,upgrade,upgrade-all,uninstall,uninstall-all,reinstall-all,list,run,runpip,ensurepath,completions}
install Install a package
inject Install packages into an existing Virtual Environment
upgrade Upgrade a package
upgrade-all Upgrade all packages. Runs `pip install -U <pkgname>`
for each package.
uninstall Uninstall a package
uninstall-all Uninstall all packages
reinstall-all Reinstall all packages
list List installed packages
run Download the latest version of a package to a
temporary virtual environment, then run an app from
it. Also compatible with local `__pypackages__`
directory (experimental).
runpip Run pip in an existing pipx-managed Virtual
Environment
ensurepath Ensure directories necessary for pipx operation are in
your PATH environment variable.
completions Print instructions on enabling shell completions for
pipx更多信息可查阅 pipx 工具文档
个人总结
就我个人来讲,作为一名 pyenv 与 pipenv 的深度使用者,有感于在这些版本管理工具的帮助下, Python 版本的调整虽然对开发环境的影响并不是很大,但是对于 CLI 工具还是会有一些影响的。总想着有没有一款工具可以满足这样的需求,即:将所有的 Python 工具单独维护起来,这样就与我们的开发环境彻底分离开来。不再存在版本升级导致工具失效的问题了。如果操作与使用再简洁一些就更完美了,pipx 无疑解决了我的痛点。特向大家推荐~
