pipx:一款很特别的类 pip 工具
前几天分享 Python 核心开发者 Brett Cannon 的文章建议时,里面有提到一个叫 pipx 的工具。之前了解不多,但是看完文档之后,发现它特别有意思,因此专门用一篇文章向大家推荐一下。
pipx 是什么?
据官网介绍,pipx 是安装并运行 Python 终端用户应用(end-user applications)的工具。终端用户应用,其实可以理解为用 Python 编写的命令行工具,可以直接从命令行调用的那种。
有点类似 Mac 下的 brew,类似 JavaScript 的 npx,和 pip 也很像,只是专门用来安装命令行工具库。
pipx 之所以存在,是因为 Python 和 PyPI 支持开发者发布带有”终端脚本入口“的代码,用户可以在命令行调用 Python 代码,使得这个 Python 包类似于一个独立的应用。
官网:https://pipxproject.github.io/pipx/
pipx 的主要功能
pipx 支持如下功能:
将 Python 包安全地安装在隔离环境中,同时又可以全局暴露出命令行的调用入口。这样可以避免依赖之间的冲突。
列举、更新和删除使用 pipx 安装的包
在临时环境中运行某个 Python 应用的最新版
pipx 需要 Python 3.6 及以上版本,同时必须已经安装好了 pip。
工具原理
如果想知道 pipx 命令背后都是怎么执行的,那么可以在传入 --verbose 参数查看。我们具体说明运行二进制文件时,是什么样的操作流程:
创建或重复使用一个共享的虚拟环境,虚拟环境中有 Python 包管理所需的库,默认路径是
~/.local/pipx/shared/
确保所有包管理相关的库,都更新到最新版
根据包名称、python 版本、pip 参数等属性,创建一个临时目录(或使用已缓存的目录)
在目录中通过
python-m venv
创建虚拟环境在新建的虚拟环境中安装指定的包
调用对应的二进制文件
上面这些步骤,我们手动也可以完成。pipx 所做的,则是将整个流程自动化了!
可以使用的 Python 应用
有一些常用的 Python 工具,推荐大家尝试通过 pix 安装:
pipx install ansible # IT automationpipx run asciinema # Record and share your terminal sessions, the right way.pipx run black # uncompromising Python code formatterpipx run --spec=babel pybabel --help # internationalizing and localizing Python applicationspipx run --spec=chardet chardetect --help # detect file encodingpipx run cookiecutter # creates projects from project templatespipx run create-python-package # easily create and publish new Python packagespipx run flake8 # tool for style guide enforcementpipx run gdbgui # browser-based gdb debuggerpipx run hexsticker # create hexagon stickers automaticallypipx run ipython # powerful interactive Python shellpipx run jupyter # web-based notebook environment for interactive computingpipx run pipenv # python dependency/environment managementpipx run poetry # python dependency/environment/packaging managementpipx run pylint # source code analyzerpipx run pyinstaller # bundles a Python application and all its dependencies into a single packagepipx run pyxtermjs # fully functional terminal in the browserpipx install shell-functools # Functional programming tools for the shell