1. Python 3.8.1安装

源码安装常规操作:

wget -c https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
tar -xvf Python-3.8.1.tgz
mkdir -p /my/python/
cd Python-3.8.1
./configure --prefix="/my/python/"
make
make install

make后没报错,但出现了如下提示:

Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

下载libssl(替代openssl)

https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/

源码编译安装成功。我想指定libssl来编译python3,做了如下尝试:

export LDFLAGS=" -L/zfssz3/SP_MSI/USER/pengjianxiang/software/INSTALL/LibreSSL23/lib"
export CPPFLAGS=" -I/zfssz3/SP_MSI/USER/pengjianxiang/software/INSTALL/LibreSSL23/include"
export PKG_CONFIG_PATH="/zfssz3/SP_MSI/USER/pengjianxiang/software/INSTALL/LibreSSL23/lib/pkgconfig"

然后加参数试试。

./configure –prefix=/my/python –enable-shared CFLAGS=-fPIC #提示没这个参数
./configure –prefix=/my/python --with-openssl=/my/libssl/path #编译报错

看一些教程,修改Modules/Setup文件,把这些行取消注释。

#SSL=/usr/local/ssl  #改为我安装的ssl路径,尝试了也没用
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto

以上方法都不行。

最后干脆忽略make提示的这一句,反正它又不是error,直接安装。装成功了。

Python 3.8.1 (default, Feb 12 2020, 13:03:12)
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello python3")
hello python3
>>>

但是这个SSL的问题在后续会显现。有答案(https://www.cnblogs.com/zhangweiyi/p/10614658.html)说安装python时,应该加这么个参数,否则后续有很多包安装不上:

./configure --prefix=/my/path/python38 --with-ssl # pip3会用到ssl模块,没有指定的话后续该功能不能使用

2. Python3配置及其包安装管理

将python3加入环境变量

系统中我还有个python2.7在用,也加入了环境变量。为了使用的时候能区分版本,加入的时候要注意名字的差异。

python2的bin目录如下,可知用python/python2以及pip/pip2均可:

成功安装后的python3的bin目录如下,可以用python3/python3.8以及pip3/pip3.8。

如果安装的python3和python2有重名的话,最好是重命名一下区分后再加入环境中。这里因为我安装后的名字本来就有区分,就可直接加入环境变量了。

环境变量在bash_profile或bashrc中设置都可以,我习惯了bashrc了:

vim ~/.bashrc
# python3/pip3 环境变量
export PATH=/my/path/Python38/bin:$PATH
source ~/.bashrc

查看下是否可以:

which python
>>>/my/path/Python-2.7.15/bin/python
which python2
>>>/my/path/Python-2.7.15/bin/python2
which pip
>>>/my/path/Python-2.7.15/bin/pip
which pip2
>>>/my/path/Python-2.7.15/bin/pip2 which python3
>>>/my/path/Python38/bin/python3
which pip3
>>>/my/path/Python38/bin/pip3

所以若要用python2时,使用python或python2;若用python3时,使用python3即可。

包的路径设置

除了python要设置外,python包的位置也需要定义,不同版本无法相互安装,容易发生冲突。

export PYTHONPATH=/my/path/Python38/lib/python3.8/site-packages

site-packages是python默认安装包的位置,可查看已安装哪些包。也可用pip3 list查看安装包列表。

包的安装

设置python3的包路径之后,有些包如果直接用pip3 install安装也会出现问题。

建议用某一个版本安装包时,最好是在.bashrc将另一个版本的python和pythonpath注释掉,以免冲突。安装完成或者需要互换时再切换回来。

pip3 install numpy
ERROR: Could not find a version that satisfies the requirement numpy (from versions: none)
ERROR: No matching distribution found for numpy
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

这很有可能是网络的问题,需要使用国内的镜像源来加速,比如豆瓣源。

pip3 install numpy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com



总之,安装包首先需要联网,如果安装失败,多种方法都可以尝试下,包括加国内镜像源,或者换镜像源:

pip3 install numpy
pip3 install numpy -i http://pypi.douban.com/simple
pip3 install numpy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

国内的镜像源有:

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

豆瓣:http://pypi.douban.com/simple/

如果觉得每次安装包都需要加镜像源很麻烦,也可进行一次性永久性修改,在~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)中添加内容:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

但不建议这么做,因为我觉得各个镜像源的包都不是很全,安装时可以互相补充。很多包其实用默认的反而能安装成功。

如果不确定包名(python2可能与python3有出入),可用pip search package来查看,再安装功能相同的包。比如smtplib模块(发送邮件),如果直接用install是安装不上的:

$ pip3 install smtplib
ERROR: Could not find a version that satisfies the requirement smtplib (from versions: none)
ERROR: No matching distribution found for smtplib

pip3 search smtplib后,可以看到这么多功能类似的包。这里我们安装PyEmail



就可以直接导入smtplib模块了。

Python 3.8.1 (default, Feb 13 2020, 10:49:45)
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import OptionParser
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'OptionParser'
>>> import smtplib
>>> exit()

同样地,如果直接安装MIMEMultipart包会失败,search一下。



安装这个包后,可导入我们之前用的许多python2模块了。

Python 3.8.1 (default, Feb 13 2020, 10:49:45)
[GCC 4.9.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import email.mime.multipart
>>> from optparse import OptionParser
>>> from email.mime.multipart import MIMEMultipart
>>> from email.mime.text import MIMEText

导入包

安装好的包导入试试:


问题

很多包装不上,报如下错:

WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/optionparser/
Could not fetch URL https://pypi.mirrors.ustc.edu.cn/simple/optionparser/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.mirrors.ustc.edu.cn', port=443): Max retries exceeded with url: /simple/optionparser/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
ERROR: Could not find a version that satisfies the requirement optionparser (from versions: none)
ERROR: No matching distribution found for optionparser
WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

简单说就是Can't connect to HTTPS URL because the SSL module is not available,这是因为安装python时未能安装ssl的遗留问题(上面那个答案说加--with-ssl选项,然而并没有这个选项)。python3的ssl模块(ssl用来采集https后缀的链接)必须用openssl并且版本必须大于等于1.02或者libressl2.64(不含)以后的版本,而默认linux的是1.01。有回答说openssl貌似有漏洞,建议用libressl来替代。

系统自带的openssl版本与python3的版本不匹配,所以这里只要安装libressl就可以解决问题。网上教程都是有root权限修改配置文件,再建立硬链接,但我因为没有root权限,还是比较麻烦的。

下一篇(Linux非root安装Python3以及解决SSL问题)将通过升级openssl,并重新编译python3来彻底解决这个问题。

Ref: https://blog.csdn.net/love_cjiajia/article/details/82254371

https://www.cnblogs.com/Caiyundo/p/9469711.html

https://blog.csdn.net/qq_38486203/article/details/88864506

https://www.cnblogs.com/lijinze-tsinghua/p/8666558.html

https://www.cnblogs.com/songzhixue/p/11296720.html

https://www.cnblogs.com/mengzhilva/p/11059329.html

【Linux】非root安装Python3及其包管理的更多相关文章

  1. Linux非root安装Python3以及解决SSL问题

    说明 接上一篇. [Linux]非root安装Python3及其包管理 上一篇虽然成功安装了Python3及一些常用的模块,但因为一直装不上SSL模块,导致一些包无法安装,尝试了不少方法都失败了(网上 ...

  2. [Linux] 非root安装GCC9.1.0

    说明 一般Linux系统自带或公共的GCC版本都很低,如目前我们的服务器版本的GCC还停留在gcc-4.9.3,而官网已到达9.2版本(下载http://ftp.gnu.org/gnu/gcc/) , ...

  3. [linux] 非root安装Python2及其模块

    需求 系统自带的python2版本太低,且没有想要的模块,非root用户无法安装.有些模块是python2写的,无法用python3,所以自己下载一个高版本的python2,可以自由下载模块. 实现 ...

  4. [Linux] 非root安装Lefse软件及其数据分析

    说明 Lefse软件是宏组学物种研究常用软件,一般大家用在线版本即可.但要搭建在Linux集群环境中有点烦,记录一下折腾过程. 安装 这个软件是python2写的,因此假设我已经安装好了较高版本的py ...

  5. 【Linux】kali 安装 python3 和 pip3(亲测有效)

    [Linux]kali 安装 python3 和 pip3 引言:   在使用kali的时候,经常会用到各种工具以及脚本,而大多数脚本都是以python编写的,但是烦就烦在python有2个版本,有些 ...

  6. [Linux]非root的R环境被conda破坏后如何恢复?

    记录说明 这篇文章本来是用来记录Linux非root环境下安装PMCMRplus包折腾过程,但后来试过了各种方法安装不上这个R包后,我换上了Miniconda来安装.经前人提醒,一开始安装Minico ...

  7. zzw原创_非root安装fastDFS

    zzw原创_非root安装fastDFS fastDFS 想要非root安装,没找到资料,分析了一下安装脚本,原来作者是留了安装路径的,但没有放出来. 1.解包 [bdc@svr001 setup]$ ...

  8. nginx非root安装

    nginx非root安装 唯一需要解决的就是指定安装目录 这里使用nginx相关包如下 nginx-1.14.0.tar.gz 安装需要依赖如下2个包 pcre-8.42.tar.gz zlib-1. ...

  9. Linux各主要发行版的包管理命令对照

    Linux各主要发行版的包管理命令对照 Debian使用的是apt和dpkg,Gentoo则用的是emerge,Redhat的yum.Suse的zypper.Arch的pacman.Slackware ...

随机推荐

  1. [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考

    一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...

  2. BUAA_2020_软件工程_热身作业

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 热身作业要求 我在这个课程的目标 了解软件工程的技术,掌握工程化开发的能力 这个作业在哪个具体方面 ...

  3. eureka服务端和客户端的简单搭建

    本篇博客简单记录一下,eureka 服务端和 客户端的简单搭建. 目标: 1.完成单机 eureka server 和 eureka client 的搭建. 2.完成eureka server 的添加 ...

  4. Python ValueError: Attempted relative import in non-package Relative import相对引用 错误

    包含相对路径import的python脚本不能直接运行,只能作为module被引用. 例如 from . import mod1 有这样代码的文件只能最为moulule为不能直接运行.相对路径就是相对 ...

  5. Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治

    题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...

  6. CentOS7 导入oracle数据

    1.切换到 oracle用户 #su - oracle 2.导入(一般的不会导入到sys账号下) #imp sys/密码@orcl file=/home/oracle/20200428.dmp fro ...

  7. Spring Cloud Alibaba 使用 feign 和 rebion 进行服务消费

    微服务的服务消费,一般是使用 feign 和 rebion 调用服务提供,进行服务的消费,本文将实战使用代码讲解服务的消费. 微服务环境的搭建 创建一个 springboot 项目,springboo ...

  8. matlab与python scipy.signal中 freqs freqz 中w,什么时候是角频率,什么时候是真实的工程中使用的采样频率Hz,如何转化

    matlab与python scipy.signal中的freqs,freqz频率分析函数,输出的w,有时候是角频率,有时候是真实频率,容易搞混,这里对比一下. 0.  精要总结: 1) freqs: ...

  9. xxx.app已损坏无法打开、来自身份不明的开发者解决办法

    在 Mac 上安装非 App Store 软件时,可能会遇到一些这样或那样的问题,这篇文章就 Mac 从 .dmg 安装软件时可能遇到的问题提一些解决方法. 状况一:双击 .dmg 安装软件出现以下情 ...

  10. Effective C++ 总结笔记(二)

    二.构造/析构/赋值运算 05.了解C++默默编写并调用那些函数 如果自己不声明, 编译器就会暗自为class创建一个default构造函数.一个copy构造函数.一个copy assignment操 ...