用PyPy来安装第三方程序如何使用管道

141 阅读1分钟

看到PyPy比CPython更快地运行一个中等规模的程序后,我想知道用PyPy来运行pyls我用在GNU Emacs中对Python进行基于LSP的编辑)会有多容易,因为pyls相当大,而且可能相当耗费CPU。 Pyls是一个第三方程序,没有被Ubuntu打包,但可以通过PyPI获得,所以通常我用'pip3 install --user ...' 来安装它,这样它就会进入$HOME/.local/bin

我先说说我的结论:对于PyPy来说,我想用一个virtualenv来安装和管理第三方程序(至少对于Ubuntu打包的PyPy的版本和设置)。由于各种原因,我通常不太喜欢virtualenv,如果可以的话,我也会避免使用它们,但是使用virtualenv比试图让pip for PyPy和pip for CPython共存要少一些麻烦,也更容易成功。 也许你可以用足够的汗水让它工作,但是耸耸肩,做一两个virtualenv,并接受每个virtualenv的30MBytes开销要容易得多。

你肯定想要一个用于PyPy 2的virtualenv和第二个用于PyPy 3。我认为你可以把所有你想要的第三方命令放到一个virtualenv中,而不是为pyls准备一个virtualenv,为YAPF准备一个,等等。为了使用Ubuntu版本的PyPy来设置我的virtualenv,我按照PyPy的文档来做:

virtualenv -p /usr/bin/pypy3 $HOME/lib/pypy3-env
virtualenv -p /usr/bin/pypy $HOME/lib/pypy2-env

virtualenv 的Ubuntu打包版本是一个Python 3程序,但它仍然可以用来设置Python 2 PyPy的virtualenv。这对熟悉它的人来说可能是例行公事,但我不熟悉。

一旦你的virtualenv设置好了,你就可以像往常一样用virtualenv的pip开始安装东西:

$HOME/lib/pypy3-env/bin/pip install python-language-server

(对于pyls,你需要安装PyPy开发包,在Ubuntu 20.04上,这些包是pypy-dev和pypy3-dev。)

你不需要激活virtualenv来运行它的命令;正如我之前发现的,虚拟环境会透明地添加到sys.path我不确定当PyPy改变版本(或者改变它声称的Python 3的版本)时,你需要对virtualenv做什么维护。 我可能有一天会发现的。

即使你的系统版本的Python 2没有打包和提供pip(Fedora现在没有提供),你的virtualenv似乎神奇地得到了它,并且可以工作。我不太清楚这是如何工作的(尽管我确信如果我深入研究的话,我可以找到答案),但我对这个结果很满意,因为它相当方便。