Install Python3.7 in ubuntu 16.04

Installing steps for python3.7

# Install requirements
sudo apt-get install -y build-essential
sudo apt-get install -y checkinstall
sudo apt-get install -y libreadline-gplv2-dev
sudo apt-get install -y libncursesw5-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libsqlite3-dev
sudo apt-get install -y tk-dev
sudo apt-get install -y libgdbm-dev
sudo apt-get install -y libc6-dev
sudo apt-get install -y libbz2-dev
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y openssl
sudo apt-get install -y libffi-dev
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-setuptools
sudo apt-get install -y wget
# Prepare to buildmkdir /tmp/Python37cd /tmp/Python37
# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xvf Python-3.7.0.tar.xz
cd /tmp/Python37/Python-3.7.0
./configure --enable-optimizations
sudo make altinstall

使用上面的 script ,會產錯 error message:

ModuleNotFoundError: No module named ‘_ctypes’


Python3 中有个内置模块叫 ctypes,它是 Python3 的外部函数库模块,它提供兼容 C 语言的数据类型,并通过它调用 Linux 系统下的共享库(Shared library),此模块需要使用 CentOS 7 系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。

所以错误原因是:在 CentOS 7 系统中没有安装外部函数库(软件包名:libffi)的开发链接库软件包。

CentOS 7 解法:

sudo yum -y install libffi-devel

Ubuntu 16.04 解法:

sudo apt-get install libffi-dev

安裝完必要的 lib ,請再補執行指令:

sudo make altinstall

讓python3,pip3 map到 python3.7,pip3.7 (optional)
加下面二行到~/.bashrc :

alias python3="python3.7"
alias pip3="pip3.7"

重開terminal確認結果

python3 -V

上面的 script 還會有一個問題,就是不支援 ssl.

測試 openssl 版本指令:

openssl version

測試 ssl python 指令:

import ssl

正確應該無反應,如果該行有錯,會顯示:

no moudle named _ssl

解法:

升级openssl

下载最新版openssl
https://www.openssl.org/source/

wget https://www.openssl.org/source/openssl-1.1.0j.tar.gz
tar xvf openssl-1.1.0j.tar.gz
cd openssl-1.1.0j
make clean
./config shared zlib --prefix=/usr/local/openssl
make
make install

備份舊的版本:

mv /usr/bin/openssl /usr/bin/openssl.bak

将安装好的openssl命令软连到/usr/bin/openssl

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

重新编译安装 python 3.7

make clean
./configure --enable-optimizations --with-ssl --with-openssl=/usr/local/openssl
sudo make altinstall

注意:需要指定openssl的安装路径 –with-ssl –with-openssl=/usr/local/openssl,只有使用 –with-ssl 似乎不會成功;只有使用–with-openssl=/usr/local/openssl 也不會成功。

相關文章

寫留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *