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 问题解决了!