由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接。

今天在 CentOS 7.4 使用源码编译安装 Python-2.7.15 的时候,发现了一个非常奇怪的问题:

$ ./configure --prefix=/home/steven/python-2.7 --enable-shared
$ make
$ make install

安装完成,进入 /home/steven/python-2.7/bin/python 命令行,发现 Python 变成了 2.7.5。安装过程中既没有报错,也没有其他任何的 warnning 信息。重装过程中甚至使用 make test 进行了检测,Tests result: SUCCESS!问题依然无法解决。

$ /home/steven/python-2.7/bin/python
Python 2.7.5 (default, Aug  4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

开始怀疑是个人 home 目录或者系统 env 的影响,但检查了很多遍,甚至清空了所有的 env,更换其他用户,更换 Python-2.7.14 安装,结果都一样。毫无头绪之下,调整编译尝试最简安装:

$ ./configure --prefix=/home/steven/python-2.7 
$ make
$ make install

这次,/home/steven/python-2.7/bin/python 居然变成了 2.7.15,一切都正常了!很明显 --enable-shared 是整个问题的关键。对此 Python 官方给出了解释:

The problem is, that on most Unix systems (with the notable exception of Mac OS X), the path to shared libraries is not an absolute path.  So, if you install Python in a non-standard location, which is the right thing to do so as not to interfere with a system Python of the same version, you will need to configure in the path to the shared library or supply it via an environment variable at run time, like LD_LIBRARY_PATH.  You may be better off avoiding –enable-shared; it’s easy to run into problems like this with it.

From
Python Issue27685, https://bugs.python.org/issue27685

即是说,在大多数 Unix 系统上(除了 Mac OS X 之外),共享库的路径不是绝对路径。 因此,如果我们在非标准位置安装 Python,为了不和相同版本的系统 Python 产生干扰,我们需要配置非标准位置安装的 Python共享库的路径,或者通过设置运行时的环境变量,如 LD_LIBRARY_PATH。 为了避免这个问题,我们最好避免使用 --enable-shared

或者我们也可以使用以下预编译命令,以避免开启 --enable-shared 时,默认只有一个版本的 Python:

./configure --enable-shared --prefix=/opt/python LDFLAGS=-Wl,-rpath=/opt/python/lib

·end·

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

聊一聊 Python 安装中的 --enable-shared的更多相关文章

  1. python 安装中的错误解决

    最近使用python3.5,其中遇到安装中的错误,现在记录下来,提个醒 1 安装setuptools 出现缺少 zlib模块 解决: 1 yum install zlib 2 yum install ...

  2. 简单解决python安装中的Unable to find vcvarsall.bat问题

    使用python36安装python的murmurhash的时候遇到上述问题,原因是没有找到vcvarsall.bat.查找vcvarsall.bat的方法是定义在_msvccompiler.py文件 ...

  3. Linux搭建python环境中cx_Oracle模块安装遇到的问题与解决方法

    安装或使用cx_Oracle时,需要用到Oracel的链接库,如libclntsh.so.11.1,否则会有各种各样的错误信息. 安装Oracle Instant Client就可得到这个链接库,避免 ...

  4. python编程中在ubuntu中安装虚拟环境及环境配置

    1.升级python包管理工具pip pip install --upgrade pip 备注:当你想升级一个包的时候 `pip install --upgrade 包名` 2.python虚拟环境安 ...

  5. Python安装scrapy过程中出现“Failed building wheel for xxx”

    https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml Python安装scrapy库过程中出现“ Failed building wheel for xxx ...

  6. hanlp在Python环境中的安装失败后的解决方法

    Hanlp是由一系列模型与算法组成的javag工具包,目标是普及自然语言处理再生环境中的应用.有很多人在安装hanlp的时候会遇到安装失败的情况,下面就是某大神的分享的在python环境中安装失败的解 ...

  7. Python安装及运行中可能遇到的问题。

    1.报错找不到Selenium. 解决办法: (1)可以调整工具中的以下两项 Setting: (2)Setting中设置此目录为Python安装目录,选择设置中的第一项后配置以下Python3.5的 ...

  8. Windows 下在 Python (Anaconda) 中安装 Dlib 库

    0. 引言 介绍在 Windows  操作系统下,在 Python 的 Anaconda 集成环境中,安装 Dlib 库 : 对于不了解源码编译的,或者利用 cmake 方法失败的,可以尝试下此方法: ...

  9. Python 开发中easy_install的安装及使用

    easy_install是一个python的扩展包,主要是用来简化python安装第三方安装包,在安装了easy_install之后,安装python第三方安装包就只需要在命令行中输入:easy_in ...

  10. linux中python安装

    1.查看当前环境中是否存在python安装包 [zyj@localhost ~]$ rpm -qa | grep python gnome-python2-gnome--.el6.x86_64 pyt ...

随机推荐

  1. 磁盘IO 基本常识

    计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代.然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SS ...

  2. vue之头像管理思路

    思路是在vant库中使用插件将上传的头像转码存入数据库中.每个用户存一个,不同用户就有不同的头像了.若数据库中没有头像,那么就给一个默认头像 头像上传后端接口: var express = requi ...

  3. python入门教程之十八正则表达式

    re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. 函数语法: re.match(pattern, string, ...

  4. StampedLock:JDK1.8中新增,比ReadWriteLock还快的锁

    摘要:StampedLock是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读避免数据不一致的问题,并且在读多写少的高并发环境下,比ReadWriteLock更快 ...

  5. [设计模式/网络/WebServer/Nginx]设计模式之代理模式(网络代理 : 正向代理与反向代理)【7】

    1 代理模式 1.1 模式定义 代理模式(Proxy Pattern):为其他对象提供一种代理服务以对这个被代理的对象进行控制访问.[ 设计模式.面向对象程序设计思想的鼻祖----GoF] Subje ...

  6. 【JSOI2008】最大值

    [JSOI2008]最大值 线段树裸题!动态RMQ. 这道题的操作是直接在序列末尾添加数值,所以连\(push_{down}\),以及建树什么的都不用了.. 这真是写过的最简短的一道\(seg_{tr ...

  7. Windows 本地安装mysql8.0

    前言 看了网上许多关于Windows 本地安装mysql的很多教程,基本上大同小异.但是安装软件有时就可能因为一个细节安装失败.我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的.现我将 ...

  8. Go语言实现分布式对象存储系统

    实现一个可扩展的,简易的,分布式对象存储系统 存储系统介绍 先谈谈传统的网络存储,传统的网络存储主要分为两类: NAS,即Newtwork Attached Storage,是一个提供了存储功能和文件 ...

  9. 基础常用API总结2

    String java.lang包下 返回值类型 方法 功能 boolean matches(String regex) 如果匹配当前字符串中regex(正则表达式)所表示的字符,如果有返回ture没 ...

  10. 搭建CTF动态靶场

    前言 本文借鉴文章:https://www.yuque.com/dengfenglai-esbap/kb/mc4k41?#xOxNG 在此基础上修改了一点(照着原来的做没成功),感谢这位师傅给的资源. ...