为什么需要使用源码编译安装?
使用apt-get下载验证python3安装时,(sudo apt-get install python3
) 你可能会看到python3 is already the newest version (3.5.1-3)
。即你提供的仓库中不存在更高版本或者通过apt-get暂时只能安装这么高的版本。
如果你没看到这个提示,那么就可能单纯是你的仓库中没有这个版本的python,可以如下操作:
apt-get install -y software-properties-common
add-apt-repository ppa:deadsnakes/ppa
或者add-apt-repository ppa:jonathonf/python-3.7
apt-get update
apt-get install python3.7
或者尝试添加软件源:
vi /etc/apt/sources.list
# 阿里云的软件源
deb http://mirrors.aliyun.com/ubuntu/ vivid main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-backports main restricted universe multiverse
#ubuntu 有科学上网可以加上,否则太慢,没用
# deb http://archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
# deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
# deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
# deb http://archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse
# deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb http://ppa.launchpad.net/q-quark/equalx/ubuntu xenial main
更新下载源
sudo apt-get update
如果还是不行,就可以考虑从源码编译安装了。
本教程使用Python3.7.1演示安装
linux用户需要进行时间同步
#设置时区 依次输入 4 9 1
tzselect
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#手动设置系统时间
sudo date -s MM/DD/YY
sudo date -s hh:mm:ss
#自动设置,系统时间与网络时间同步
sudo apt-get install ntpdate
ntpdate cn.pool.ntp.org
date -R #查看系统时间是否生效
#同步系统时间到硬件时间
hwclock --systohc
hwclock --show #查看硬件时间是否生效,只看分钟和秒钟即可
如果不做这步,可能会出现:
The C++ compiler does not support C++11 (e.g. std::unique_ptr)
这是因为 linux 操作系统下, 当cmake源码所在位置为挂载盘(mount), 且挂载盘位于不同的服务器, 此时如果出现挂载盘服务器与当前服务器时间不同步, 编译cmake源码则会报上述错误。
适用于非 arm32+linux 的用户
https://cmake.org/download/
选择自己平台的安装包,如果是仍然是linux,解压后跳转至1.3继续安装。win和mac平台可以直接选择软件安装,一般都可直接使用,直接跳过后续步骤直接测试 cmake --version
。
(一般用于arm32架构e.g.armv7l + linux系统)
sudo apt update
sudo apt install gcc
sudo apt install g++
sudo apt install ninja-build
sudo apt install make
sudo apt install libssl-dev
sudo apt install wget
cd ~
wget https://www.cmake.org/files/v3.10/cmake-3.24.3.tar.gz
tar -zxvf cmake-3.24.3.tar.gz # 或者从上面这个网站(https://www.cmake.org/files/v3.10/cmake-3.24.3.tar.gz)直接下载并放到~目录下
cd cmake-3.24.3
sudo mkdir /usr/local/cmake
#检查文件是否齐全
#法一
./bootstrap --prefix=/usr/local/cmake
#法二
export CXXFLAGS="-O3"#有时不需要
./configure --prefix=/usr/local/cmake
make -j4 #主要看机器的内存和cpu核数。内存小,即使cpu有4个核也不要用-j4而是-j1
sudo make install
然后跳转至1.3继续安装
软链接的方法 sudo ln -s /usr/local/cmake/bin /usr/bin
,然后就可以直接使用了
或者为cmake添加配置路径
sudo vi ~/.bashrc
在第一行添加
export PATH=/usr/local/cmake/bin:$PATH
关闭文件,source ~/.bashrc
,当前用户即可一直使用这个配置路径
验证cmake是否安装成功
cmake --version
到此cmake就安装完成了。
更新下载源:
sudo apt-get update
下载:
sudo apt-get install gcc g++ patchelf zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev lzma liblzma-dev libffi-dev libc6-dev
如果 libffi-dev无法安装,可以按下列指令单独下载:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev
注意事项:
一定要下载完了再进行下一步,否则你可能会在make
编译时看到这些信息:
ModuleNotFoundError: No module named '_ctypes'
或其他module不在的报错,从而导致需要重新编译。
1.下载
这里提供3.7.1的源码包:
链接: https://pan.baidu.com/s/1640r2VRsH1rpmMzUW0Wb4w?pwd=hell
如何想下载其他版本的,可以官网下载:
https://www.python.org/ftp/python/
下载完成后将tar包上传到需要安装的机器上。
或者如果有科学上网也可以在命令行操作:
apt-get install wget
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
2.解压
cd ~/
如果为.tar.gz
tar -xzvf Python-3.7.1.tgz
如果是.tar
tar -zvf Python-3.7.1.tar
#进入解压的目录
cd ~/Python-3.7.1
#创建安装目录
sudo mkdir -p /usr/local/python3
#编译并安装
./configure --prefix=/usr/local/python3 --enable-optimizations
make -j4(低端cpu或内存小使用 -j1)
sudo make install
建立新的指向python3.7的软链接(类似做了一个命令映射或快捷指令)
#如果你还想保留python2则:
sudo ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
使用时:pytho3 ...
#否则添加python3的软链接也链接到python上,这样python3和python都是使用当前python版本的
sudo ln -s /usr/local/python3/bin/python3.7 /usr/bin/python
#如果你还想保留pip则:
sudo ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
使用时:pip3 ...
#否则可将pip3的软链接也链接到pip上,这样pip3和pip都是使用当前python版本的
sudo ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip
如果报错就:
rm -rf /usr/bin/python
或rm -rf /usr/bin/python3
rm -rf /usr/bin/pip
或rm -rf /usr/bin/pip3
e.g.
ln: failed to create symbolic link '/usr/bin/pip': File exists
则:rm -rf /usr/bin/pip
vim ~/.bashrc
export PYTHON_HOME=/usr/local/python3
export PATH=$PYTHON_HOME/bin:$PATH
export PYTHONPATH=/usr/local/python3/lib/python3.7/site-packages:$PYTHONPATH
source ~/.bashrc
到此python3.7.1就安装完了,本教程也适用于其他版本的安装