最近我写了一篇关于我应该如何为第三方程序使用虚拟环境的文章,并说我很可能最终会尝试pipx。今天,我运行了'pip3 list --user --outdated',盯着它和'pip3 list --user'的输出,并决定我的~/.local 中的情况已经达到了足够的临界点,我愿意把它烧掉,从头开始。因此,这里有一些关于pipx 的早期笔记,在我的笔记本电脑上进行了实验,然后在我的家庭桌面上切换到它。
总的来说,pipx的基本使用方法是令人愉快的,简单明了。运行'pipx install mypy'(例如)会创建一个.local/pipx/venvs/mypy的虚拟环境,在其中安装东西,然后在.local/bin中创建符号链接到mypy通常安装的各种程序。Pipx在venv中添加了一个'pipx_metadata.json'文件,其中包含了关于虚拟环境的各种信息。venvs似乎是以你用'pipx install'安装的主要软件包命名的。
我对 pipx 的一个主要用途是安装Python LSP 服务器,它有两个额外的东西。首先是你在安装它时通常会指定一些额外的件,而不是仅仅作为一个普通的包名,例如:
pipx install 'python-lsp-server[rope,yapf]'
Pipx很好地应对了这个包的规范,并将venv称为'python-lsp-server'。第二件事是,你可能想添加一些额外的第三方插件,比如mypy-ls;这些需要以某种方式安装到venv中。在pipx中,这是用'pipx inject <package>'完成的,例如'pipx inject mypy-ls'。
所有这些似乎都被记录在 pipx_metadata.json 中,所以我希望 'pipx reinstall <...>' 能够正确地重新安装我的所有 Python LSP 设置,而不需要我记住我到底添加了什么(我还没有测试过,而且手册页面也很模糊)。
我不确定你应该如何寻找你已经安装的东西的升级。我想有一个选项是 "pipx upgrade"或 "pipx upgrade-all",然后让它做事情,另一个是直接询问pip,使用 "pipx runpip <package> list --outdated"。最后一个可能是找出你可能想要的新版本的依赖性的唯一方法,反正pip通常不会升级。处理使用pip升级程序的一般问题的一个强硬方法是定期运行'pipx reinstall <...>',这应该给你一个尽可能最新的venv,但要付出一定的开销。
总的来说,即使pipx并不完美,它也比我以前的~/.local 乱七八糟的东西要好得多,而且实际使用它非常容易,也不烦人,如果它有小缺陷,我也愿意忍受。