Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

What flags to use for ./configure when building Python from source

I am building Python 3.10 from source on Ubuntu 18.04, following instructions from several web links, primarily the Python website (https://devguide.python.org/setup) and RealPython (https://realpython.com/installing-python/#how-to-build-python-from-source-code). I extracted Python-3.10.0.tgz into /opt/Python3.10. I have three questions.

First, the Python website says to use ./configure –with-pydebug and RealPython says to use ./configure –enable-optimizations –with-ensurepip=install. Another source says to include –enable-shared and –enable-unicode=ucs4. Which of these is best? Should I use all of those flags?

Second, I currently have Python 3.6 and Python 3.8 installed. They are installed in several directories under /usr. Following the directions I have seen on the web I am building in /opt/Python3.10. I assume that make altinstall (the final build step) will take care of installing the build in the usual folders under /usr, but that’s not clear. Should I use ./configure –prefix=directory although none of the web sources mention doing that?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Finally, how much does –enable-optimizations slow down the install process?

This is my first time building Python from source, and it will help to clear these things up. Thanks for any help.

>Solution :

Welcome to the world of Python build configuration! I’ll go through the command line options to ./configure one by one.

--with-pydebug is for core Python developers, not developers (like you and me) just using Python. It creates debugging symbols and slows down execution. You don’t need it.

--enable-optimizations is good for performance in the long run, at the expense of lengthening the compiling process, possibly by 3-fold (or more), depending on your system. However, it results in faster execution, so I would use it in your situation.

--with-ensurepip=install is good. You want the most up-to-date version of pip.

--enable-shared is maybe not a good idea in your case, so I’d recommend not using it here. Read Difference between static and shared libraries? to understand the difference. Basically, since you’ll possibly be installing to a non-system path (/opt/local, see below) that almost certainly isn’t on your system’s search path for shared libraries, you’ll very likely run into problems down the road. A static build has all the pieces in one place, so you can install and run it from wherever. This is at the expense of size – the python binary will be rather large – but is great for non-sys admins. Even if you end up installing to /usr/local, I would argue that static is better/easier than shared.

--enable-unicode=ucs4 is optional, and may not be compatible with your system. You don’t need it. ./configure is smart enough to figure out what Unicode settings are best. This option is left over from build instructions that are quite a few versions out of date.

--prefix I would suggest you use --prefix=/opt/local if that directory already exists and is in your $PATH, or if you know how to edit your $PATH in ~/.bashrc. Otherwise, use /usr/local or $HOME. /usr/local is the designated system-wide location for local software installs (i.e., stuff that doesn’t come with Ubuntu), and is likely already on your $PATH. $HOME is always an option that doesn’t require the use of sudo, which is great from a security perspective. You’ll need to add /home/your_username/bin to your $PATH if it isn’t already present.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading