最近想弄一个code-server(VScode在线版)到服务器上写Python代码,看了看教程以为很简单,然而在安装Python解释器的时候就搞了好长时间,主要就出在SSL的问题上,网上查了一圈也基本没有有用的,最后结合一些博客加上自己研究终于搞出来了,在此记录分享一下。
准备工作
- 1台Linux服务器(这里使用Ubuntu16.04)
- libressl文件(在后面命令中有用wget下载,也可以用这个链接下载后上传到服务器)
- Python源码文件(同样在后面命令中有用wget下载,也可以用这个链接下载后上传到服务器,这里使用Python3.7.13,低版本的好像有bug,之前用低版本的一直报ssl不built)
安装过程
安装过程大致分为 安装依赖库、编译安装libressl、编译安装Python。
安装依赖库
这步没啥说的,执行apt的安装命令就行
首先更新软件库
apt-get update
然后安装依赖
apt-get install libbz2-dev libncurses5-dev libgdbm-dev liblzma-dev sqlite3 libsqlite3-dev libssl-dev tcl8.6-dev tk8.6-dev libreadline-dev zlib1g-dev uuid-dev libffi-dev
编译安装libressl
这里用libressl替代openssl,因为之前在变异Python的时候总是提示openssl要求版本1.0.2或1.1,但是无论使用1.0.2还是1.1都不行,于是用libressl替代,命令如下
cd ~
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.0.2.tar.gz
tar -zxvf libressl-3.0.2.tar.gz
cd libressl-3.0.2
./configure --prefix=/usr/local/libressl
make
make install
然后还没有结束,要建立软连接到/usr/bin
ln -s /usr/local/libressl/bin/openssl /usr/bin/openssl
ln -s /usr/local/libressl/include/openssl /usr/include/openssl
echo /usr/local/libressl/lib >> /etc/ld.so.conf.d/libressl-3.0.2.conf
ldconfig -v
如果上述命令中哪一行提示文件已存在,则用mv命令将该文件重命名(可能系统自带openssl的软连接已经存在),如
mv /usr/bin/openssl /usr/bin/openssl.pak
然后查看openssl版本
openssl version
如果是3.0.2就成功安装了,否则检查上面哪步错了,如果要重新make的话最好先make clean一下。
编译安装Python
如果上面步骤都没问题即可安装Python,这里使用Python3.7.13,因为之前使用3.7.2时无论怎么做都会出现SSL问题。
编译安装
首先下载Python源码
cd ~
wget https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz
然后解压,并进入解压后的文件夹
tar -zxvf Python-3.7.13.tgz
cd Python-3.7.13
修改文件夹中的Modules/Setup文件
vim Modules/Setup
将以下4行文本前面的#注释去掉
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
保存退出。
然后编译安装即可
./configure --prefix=/usr/local/Python3 --enable-optimizations
make
make install
安装成功后,需要进行一些软连接(如果提示文件已存在,则使用上面方法把原来的文件重命名)
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3.7
配置环境变量
vim /etc/profile
将以下内容添加到最后
export PYTHON_HOME=/usr/local/python3
export PATH=$PYTHON_HOME/bin:$PATH
保存退出,并使用以下命令使环境变量生效
source /etc/profile
然后查看python版本
python -V
如果显示3.7.13则安装成功。
然后测试一下ssl,输入python进入python命令行
python
然后执行下面命令
import ssl
import urllib.request
context = ssl._create_unverified_context()
urllib.request.urlopen('https://www.baidu.com/',context=context).read()
如果不报错则到此全部正确。
获取pip
但是到这里还没有完,这样安装的Python可能没有pip(检查安装目录的bin文件夹里有没有pip),不能安装Python的包,因此需要获取pip
cd ~
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
执行结束后再将pip软连接到/usr/bin中(如果提示文件已存在,则使用上面方法把原来的文件重命名)
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3.7
至此,python安装成功。