一 源码安装Python3
"1.下载解压源码包"
"cd /home/<用户名>/<文件位置>"
cd /home/sw/software/python_user
wget https://www.python.org/ftp/python/3.6.12/Python-3.6.12.tgz
tar -xzf Python-3.6.12.tgz
"2. 创建安装路径,完成配置,编译安装"
cd Python-3.6.12
mkdir -p /home/sw/.python3.6.12/
# 配置python安装位置
# 如果系统是Ubuntu16.04,请先完成 第三节 所有步骤,再执行下面的配置编译安装
./configure --prefix="/home/sw/.python3.6.8/"
make -j
make install
二 配置环境变量并验证
cd ~
vim ~/.bashrc
# .bashrc中新增下面一行,指定python安装目录下的bin路径
export PATH="/home/sw/.python3.6.12/bin:$PATH"
source ~/.bashrc
"验证,查看python的路径"
python3
>>import sys
>>print(sys.path)
pip3 -V
"python3.4+版本,源码安装完后pip指令默认不可用,需要按以下方式"
python3 -m pip -V
python3 -m pip install <包名>
三 解决安装完成后pip SSL问题
使用pip3、pip报错:ssl module in Python is not available
"1.安装ssl"
# 有依赖问题就先安装提示的依赖库
sudo apt-get install openssl
sudo apt-get install libssl-dev
"2. 修改Moudles/Setup (该目录在python的解压目录下)"
vim Modules/Setup
#修改结果如下:
# Socket module helper for socket(2)
_socket socketmodule.c timemodule.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/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
"3.重新安装一次,回到Python-3.6.12目录下"
./configure --prefix="/home/sw/.python3.6.12/"
make
make install
三 解决ModuleNotFoundError: No module named '_curses’问题
正常没有安装 curses时,会提示找不到模块 curses, 而这一次提示的是 no module named _curses , 而且提示你在 curses/init.py 里第几行的错误。实际上已经load了curses,只是再加载的中间出现了错误。
经过对比系统默认的python3.5,终于发现,原来用户安装的python目录下 lib/pythong3.6/lib-dynload 里没有相应的 curses 库
_curses_panel.so
_curses.so
看到名字,就明白了,原来 _curses 是指这个 _curses.so 。
解决步骤:
$ find / -iname "_curses*.so" 2>/dev/null
/usr/lib/python3.5/lib-dynload/_curses_panel.cpython-35m-x86_64-linux-gnu.so
/usr/lib/python3.5/lib-dynload/_curses.cpython-35m-x86_64-linux-gnu.so
"对应自己系统里,下面搜索的输出可能很多,找到自己安装的python的lib-dynload目录即可"
$ find / 2>/dev/null | grep 'python3.6/lib-dynload'
/home/sw/.python3.6.12/lib/python3.6/lib-dynload
"将_curses文件拷贝到需要的python目录里"
$ cp /usr/lib/python3.5/lib-dynload/_curses*.so /home/sw/.python3.6.12/lib/python3.6/lib-dynload/
但是,在ubuntu中,需要记得重命名,可以看到,系统python3.5的_curses.so文件名中是 “-35m” ,拷贝到自己安装的python后要将这部分改为对应版本,例如python3.6对应的 “-36m”