ubuntu16.04源码安装python3.6及卸载的坑

Tips:ubuntu16.04系统自带python2.7和python3.5,安装在/usr/bin下,千万不能删除.为了方便管理可以把python3.6安装在/usr/local/bin下.然后把python3.6和pip3软连接到/usr/bin下.

一 安装依赖库

sudo apt-get install gcc make zlib1g-dev
sudo apt-get install libbz2-dev
sudo apt-get install libsqlite3-dev
sudo apt-get install python3-dev libxml2-dev libffi-dev libssl-dev libxslt1-dev

二 安装python3.6

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
tar -zxvf Python-3.6.4.tar.xz
sudo mv Python-3.6.4 /usr/local
cd /usr/local/Python-3.6.4
./configure
sudo make
sudo make install

至此,安装完成!
接下来,进行软连接

ll /usr/bin | grep python   //查看是否有python软连接,如没有,跳过下一步
sudo rm -rf /usr/bin/python
sudo ln -s /usr/local/bin/python3.6 /usr/bin/python   //把python3.6链接到/usr/bin下的python上
python -V
cd /usr/bin
ls     //查看是否有pip,如没有,跳过下一步
sudo mv pip pip2  //若pip指向的是pip2,将其更名为pip2
sudo ln -s /usr/local/bin/pip3 /usr/bin/pip    //把pip3链接到/usr/bin下的pip上
pip -V

三 卸载的坑

卸载python3.5时,把桌面组件一起卸载了,导致软件和终端都显示不出来.解决办法:
Ctrl+Alt+F1进入shell,安装python相关依赖和缺失的东西.

sudo apt-get install python3-all
sudo apt-get install gnome-terminal

如果重启没用,重新安装所有的桌面组件.

sudo apt-get remove ubuntu-desktop
sudo apt-get install ubuntu-desktop

重启,问题解决.

四 导入pycharm引包失败

各种包安装好了,在命令行里import没有问题,在pycharm里import失败,原因是导入环境不对.
在File->Settings->Project Interpreter->点击右上角图标选择Add->Existing environment->选择bin文件下的python路径->在Make available to all projects栏画勾->OK->apply
导入环境成功.

五 ImportError: cannot import name ‘ssl’

源码编译安装python3.6完成之后,ssl模块缺失无效,无法import ssl.解决办法:
源码安装openssl,到openssl 官网 下载压缩包

  • 安装openssl步骤
cd /openssl-1.1.1
sudo ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl
sudo make && sudo make install
sudo gedit ~/.bashrc
在最后一行添加export PATH=$PATH:/usr/local/openssl/bin 保存退出
source ~/.bashrc
sudo ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
openssl version -a
  • python3.6关联ssl

python3.6源码安装不会自动关联ssl,需要在源码安装前,修改Python-3.6.4/Modules/Setup和/Modules/Setup.dist两个文件。把下面5行去掉前面的注释,两个文件执行同样的操作。

# Socket module helper for socket(2)
_socket socketmodule.c

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/openssl
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

注意,原来的 #SSL=/usr/local/ssl 不仅要去掉注释,还要改成自己安装的openssl路径.

  • 重新编译安装python3.6
# cd Python-3.6.4
# ./configure
# make && sudo make install

重新import ssl 问题解决了!

你可能感兴趣的:(linux,pip3,python3)