0%

debian9 非 root 用户 编译 安装 python3

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

最后祝你玩的开心(*^_^*)