【Linux】Ubuntu16.04非root装python

一 源码安装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”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值