After updating to Ubuntu 18, the default Python version on my machine became Python 3.6, but I needed to perform some validation with Python 3.5.
python3.5 -m venv venv35
First, I created a virtual environment with the command above.
. venv35/bin/activate
pip install uwsgi
However, when I tried to install uWSGI, I encountered the following errors:
/usr/bin/x86_64-linux-gnu-ld: /usr/local/lib/python3.5/config-3.5m/libpython3.5m.a(mystrtoul.o): relocation R_X86_64_32S against symbol `_Py_ctype_table' can not be used when making a PIE object. Please recompile with -fPIC.
/usr/bin/x86_64-linux-gnu-ld: /usr/local/lib/python3.5/config-3.5m/libpython3.5m.a(structmember.o): relocation R_X86_64_32S against `.rodata' can not be used when making a PIE object. Please recompile with -fPIC.
/usr/bin/x86_64-linux-gnu-ld: /usr/local/lib/python3.5/config-3.5m/libpython3.5m.a(parser.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a PIE object. Please recompile with -fPIC.
/usr/bin/x86_64-linux-gnu-ld: Final link failed: No section matching the output
collect2: error: ld returned 1 exit status
*** error linking uWSGI ***
Due to these errors, the linking process failed.
Therefore, I decided to rebuild Python 3.5 from source.
curl -O https://www.python.org/ftp/python/3.5.6/Python-3.5.6rc1.tgz tar -xzvf Python-3.5.6rc1.tgz
cd Python-3.5.6rc1/
./configure --prefix=$HOME/.local --enable-optimizations
make -s -j2
make install
Using this newly built Python, I created another virtual environment:
~/.local/bin/python3.5 -m venv venv356
. venv356/bin/activate
pip install uwsgi
This time, the installation was successful.
Reference
Installing Python from source on Ubuntu
Comments