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 build
mkdir /tmp/Python37
cd /tmp/Python37
# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz --no-check-certificate
tar xvf Python-3.7.3.tar.xz
cd Python-3.7.3
./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

如果上面的script 有產生出錯,請在安裝完必要的 lib 後,請再補執行指令:

sudo make altinstall

讓python3,pip3 map到 python3.7,pip3.7 (optional,非必要,沒做也行)
加下面二行到~/.bashrc :

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

重開terminal確認結果

python3 -V

上面是建議的解法,執行完上面的指令,請再試看看你安裝的 python3.7 有沒有支援 ssl。


上面的 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 也不會成功。

發佈留言

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