|
1 week ago | |
---|---|---|
README.md | 9 months ago | |
compile-python.sh | 1 week ago |
README.md
Compile Python
This is a small bash script to compile one or multiple Python versions.
I use it on my laptop, using Debian, but it may work on other distribs.
On Debian (and Debian-based distribs) it needs the following dependencies:
apt install make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev \
xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
Installation
Clone the repo anywhere, then in your ~/.bashrc
add:
source PATH/To/THE/REPO/compile-python.sh
And for the compiled Python to be found in your PATH:
PATH="$PATH:$HOME/.local/bin"
Usage
$ compile-pythons
$ python3.6 --version
Python 3.6.15
$ python3.7 --version
Python 3.7.12
$ python3.8 --version
Python 3.8.12
$ python3.9 --version
Python 3.9.9
$ python3.10 --version
Python 3.10.1
$ python3.11 --version
Python 3.11.0a2
How it works
It downloads official Python sources (from
https://www.python.org/ftp/python/),
then compiles them using --with-pydebug
(it's a dev tool, don't use
it in production! Rely on your distrib in production!), and
--prefix=~/.local
, and finally installs it using make altinstall
.
Anyway it's ~67 lines of code, maybe just read it.
Be nice with distrib' provided Python
compile-python
only produces binaries on the form pythonX.Y
(like
python3.8
), so python3
and python
will always point to your
distrib' Python.
But beware, depending on how you setup your PATH
, pythonY.X
may
point to your distrib' Python, or to your manually compiled one.
On Debian, don't hesitate to apt install python-is-python3
if you want python
to be python3
.
Functions
The file declares 3 functions:
compile-pythons
: To compile a set of usefull Python versions.compile-python
: To compile a given Python version (has autocompletion).venv
: Just a wrapper topython -m venv
that I like to use daily.
Using a function don't force you to use the others, they are not related.
compile-pythons
This is probably the one you're seeking, it compiles a bunch of usefull Python verisons, typically usefull if you use tox and need multiple Python versions to test your project.
compile-python
This one is used by compile-python
but you can use it manually, like:
compile-python 3.10.1
venv
A bit unrelated to the two others, here for historical reasons, this is how I create venvs. I use it like:
$ venv
If the venv does not exists it's created, if it exist it's just activated.
It takes an optional parameter: the Python version to use, like venv 3.10
or venv 3.6
.
The venv prompt takes the name of the current directory plus the version, like:
(compile-python)(py3.10.0) mdk@seaph:~/ $
which I find usefull, but feel free to not use it.
Why not using pyenv
?
I know pyenv
exists, I even used it back in the time. I did not
appreciated the shims
part (I'm not saying it's bad), so I tried
myself as something more simple: just build Python and that's it.