It's pleasantly easy to install PyPy yourself (from their binaries)
The Python language server is the most substantial Python program I run on our servers, making it an obvious candidate to try running under PyPy for a speedup. The last time around, I optimistically assumed that I would use the Ubuntu packaged version of PyPy. Unfortunately, all of our login servers are still running Ubuntu 18.04 and 18.04 has no packaged version of PyPy 3. Since Python 3 is what I use for much of both my personal and our work code and you have to run pyls under the same version of Python as the code you're working on, this is a bit of a problem. So I decided to try out the PyPy procedures for installing a pre-built PyPy, with the latest release binaries.
This turned out to be just as easy and as pleasant (on Linux) as the
documentation presented it. The tarball could be unpacked to put its
directory tree anywhere (I put it in my $HOME/lib), and it ran fine
on Ubuntu 18.04 and 20.04. I needed
pip to install
pyls, so I
followed their directions to run '
./pypy-xxx/bin/pypy -m ensurepip',
which downloaded everything needed into PyPy's tree and created a
./pypy-xxx/bin/pip program that I could use for everything else. As
with virtualenvs, once I installed pyls through pip I could run
$HOME/lib/pypy-xxx/bin/pyls and it all just worked.
In theory I think I could go on to use my $HOME/lib versions of PyPy3 and PyPy to create virtualenvs and then install things into those virtualenvs. In practice this is an extra step that I don't need for my purposes. Installing pyls and anything else I want to run under PyPy with './pypy-xxx/bin/pip install ...' already neatly isolates it in a directory hierarchy, just like a virtualenv does.
(Installing PyPy3 was so easy and straightforward that I decided I might as well also install the standard pre-built PyPy2, just so I had a known and up to date quantity instead of whatever Ubuntu had in their PyPy packages. Plus, even if I used the system version, I would have had to make a virtualenv for it. It took almost no extra effort to go all the way to using the pre-built binaries.)
All of this is really how installing pre-built software should work (and certainly how it's documented for PyPy). But I date from an era where it was usually much more difficult and pre-built software was often rather picky about where you put it or wanted to spray bits of itself all over your $HOME (or elsewhere). Right now it's still a bit of a pleasant shock when a pre-built program actually works this easily, whether it's PyPy or Rust.