我已经决定,今后我几乎想通过pipx来管理我安装的任何第三方Python程序,比如Python LSP服务器和pxpx(作为在虚拟环境中管理它们的延伸)。我也尝试过自己安装PyPy。在我们的Ubuntu服务器上使用我自己的PyPy的一个好处是,我们的Ubuntu服务器运行着不同版本的Ubuntu LTS,因此如果我依赖系统的Python,通常会遇到pip Python版本问题。所有这些(加上pipx没有为Ubuntu 18.04打包)让我想知道pipx是否在PyPy中工作。 答案是肯定的。
正如你所期望的那样,你使用PyPy安装的pip 版本来安装pipx ,它会出现在PyPy的bin/ 目录中。当你运行它时,它会创建并操作你的.local/pipx/venvs 层次结构,并(仍然)将已安装软件包的程序链接放到你的.local/bin ,而不是将它们放到PyPy的bin/ 目录中。 安装的软件包确实使用了你的PyPy,而不是系统中的(C)Python,正如你所期望的那样。 运行 pipx 安装的程序就可以了。
在一个快速测试中,用PyPy的pipx安装一个基于(C)Python的软件包时,使用了'pipx install --python ...'。Pipx将生成的venv列为使用系统版本的Python,并且venv中的符号链接等都指向正确的地方。如果你有一些东西(比如mypy)不能在PyPy下真正工作,这种事情可能是必要的。在没有测试的情况下,我怀疑你可以在同一个pipx venv树上使用几份pipx,所以你可以用CPython的pipx管理你的CPython的东西,用PyPy的pipx管理PyPy的东西。
pipx reinstall-all虽然我还没有经过练习,但我预计升级我的PyPy版本的过程将是安装新的PyPy,在新的PyPy版本中安装pipx ,然后使用新的pipx (或者我将不得不选择性地重新安装只使用PyPy的venvs)。可能有更好的方法,因为 pipx 的 reinstall-all 感觉有点蛮力。另一方面,可能有很多pipx创建的虚拟环境的位子必须被洗掉,而pipx大多在命令层面上使之简单。
(我还没有在我的Python LSP服务器venv上测试'pipx reinstall',在那里我在LSP服务器包和它的安装选项之上注入了一些额外的可选包。如果pipx能重新注入这些额外的包,那就更理想了,但我不确定它是否在元数据中捕获了足够的信息来做到这一点)。