python3.6 有新的语法,如果有用新的语法编写的的软件,软件在低版本的 python 环境是运行不起来的。
由于 我的 vps 需要运行很多服务,而且我个人比较在乎稳定性与方便性,所以升级系统的 python3 是不可能的(注:debian9 稳定版默认 python3.5 )。所以我选择新建一个普通用户。然后把 python3安装在这个用户下,需要新特性的软件全部用这个用户运行
为什么不用 Docker 呢? 因为 docker 在低性能的 vps 上表现不佳,用nodejs 的 npm 下载包的使用容易被杀进程,所以我放弃了 docker 现在完全采用 linux 用户的方式分割我所有的包 比如 node6 node8 python 还有一些不需要全局变量的包(因为容易污染环境)
首先我们需要两台 vps ,一台用来编译,一台是我常用的稳定环境。如果不是像我一样有极端的环境洁癖的, 一台 vps 就够用了。
编译 python3
首先登录编译机,编译好后再移动到常用的 vps。注意! 编译机和常用机是一样的操作系统,本教程用的 debian9 理论上也适用其他操作系统。
更新软件源和系统
sudo apt update && sudo apt upgrade
下载编译工具和本教程需要的工具
sudo apt install build-essential wget
下载依赖,这一部非常重要 不然编译出来的 python3 进行简单测试的时候没问题,一用到某些库的时候会报错
下载依赖
sudo apt install libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev libffi-dev uuid-dev
新建一个普通用户用来安装 python3,然后按命令提示设置密码和用户名。如果需要把编译好的 python3 迁移到其他 linux 就在其他 linux 上新建一个相同的用户就好了,名字一定要相同,我稍后会解释。
sudo adduser python
切换到新建的用户
sudo su - python
新建一个文件夹用来存放编译后的内容并修改目录的权限
mkdir ~/.local && chmod 700 ~/.local
下载 python3 最新源码,本下载地址随着时间的流逝可能不是最新下载地址 请访问 www.python.org 获取最新下载地址
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
解压源代码
tar xvpfz Python*.tgz
进入源代码目录
cd Python-3.7.1
运行 configure 指定安装目录并开启优化,这一步非常重要。如果打算移植编译好的文件到其他主机的话
./configure --prefix="/home/python/.local/python" --enable-optimizations
开始编译,这一步非常的耗时,我大概使用了30分钟。视机器的性能而定,可能更久或更短
make -j $(nproc --all)
编译好后安装编译好的文件
make install
设置局部变量环境,让局部变量高于系统变量以排除系统默认的 python3
echo "PATH=\"\$HOME/.local/python/bin:\$PATH\"" >> ~/.profile
刷新变量
source ~/.profile
测试 python
查看 python3 版本
python3 -V
然后到这里 python3 就安装完成了,恭喜你获得了一个完整的 python3 包括 pip3 和一些 和 python3 相关的包也都编译完成了
移植到其他主机
如果不是和我一样有极端的环境洁癖的话不用看这段话以下的文章,前面的操作就够用了
执行 cd 命令回到用户根目录
cd
将 编译后的 python3 打包 方便传输
tar cvpzf bak.tgz ./.local
使用 python3 自带的 http 模块开启网络服务,当对端下载完成后记得按下 CTRL + c
关闭模块
python3 -m http.server
然后登录另外一台服务器,新建与编译机相同的用户名,操作系统也需要相同,一定要相同 本教程使用的用户名是 python
sudo adduser python
切换到 python 用户
sudo su - python
下载刚才打包好的 python3
wget http://youip:8000/bak.tgz
解压下载好的二进制
tar xvpfz bak.tgz
设置 变量环境
echo "PATH=\"\$HOME/.local/python/bin:\$PATH\"" >> ~/.profile
刷新 变量环境
source ~/.profile
检查一下 python3 的版本
python3 -V
到这里你就获得了一个干净完整的 python3 了。
参考
https://solarianprogrammer.com/2017/06/30/building-python-ubuntu-wsl-debian/
https://bugs.python.org/issue31652
最后祝你玩的开心(*^_^*)