(转)CentOS 6下安装python2.7.5一例错误(libpython2.7.so.1.0 cannot open)

本文介绍了在使用源代码安装Python2.7后遇到的库导入问题及解决方法,包括通过配置编译参数、复制共享库文件、更新ld.so配置等步骤。

原文:http://blog.youkuaiyun.com/huzhenwei/article/details/7339548

 

使用源代码的方式安装Python2.7之后,在import某些库时抛出了如下异常:

ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

 

一 原因分析

    由于在系统的lib路径中找不到这个共享库。

   注: 如果编译时加上了--enable-shared,才会编译这个共享库,默认的位置是python可执行程序所在目录的lib目录下,如/usr/local/python27

 

二 解决方法

  1. 可以使用如下方式编译Python以解决这个问题:

    ./configure --enable-shared --prefix=/usr/local/python27

    make && make install

 

  2. cp /usr/local/python27/lib/libpython2.7.so.1.0 /usr/local/lib

     cd /usr/local/lib

     ln -s libpython2.7.so.1.0 libpython2.7.so

 

  3. 使用命令whereis libpython2.7.so.1.0得到如下结果就说明

    libpython2.7.so.1: /usr/local/lib/libpython2.7.so.1.0

 

  4. 如果whereis没有结果,或者还有import错误,可以尝试如下操作:

    在/etc/ld.so.conf中加入新行/usr/local/lib

    保存后,运行

    /sbin/ldconfig

    /sbin/ldconfig –v

 

--end

 

### 解决方案 当遇到错误提示 `Unable to find a match: libpython2.7.so.1.0` 时,这通常表明系统的动态链接器未能定位到所需的库文件。以下是可能的原因以及解决方案: #### 原因分析 该问题可能是由于以下几个原因之一引起的: 1. **缺少必要的 Python 库**:系统中未安装 Python 的开发版本或共享库[^1]。 2. **环境变量配置不正确**:即使库已存在,但如果路径未被正确设置,则运行时链接器仍无法到它[^2]。 3. **多版本冲突**:如果系统中有多个 Python 版本共存,可能会导致某些依赖关系混乱。 --- #### 验证是否存在库文件 可以通过以下命令验证目标机器上是否有 `libpython2.7.so.1.0` 文件: ```bash find / -name "libpython2.7.so*" ``` 如果没有返回任何结果,则说明此库尚未安装。 --- #### 安装缺失的库 对于基于 Debian 或 Ubuntu 的发行版,可以尝试通过包管理工具来安装对应的库: ```bash sudo apt-get install python2.7 python-dev ``` 如果是 CentOS/RHEL 类型的操作系统,可执行如下操作: ```bash sudo yum install python-devel ``` 上述命令会自动下载并安装所需的相关依赖项及其头文件[^3]。 --- #### 设置动态链接器路径 即便已经成功安装了相应的库,还需要确认其所在目录已被加入到动态加载器的搜索范围内。具体方法包括但不限于修改 `.bashrc` 文件或者调整全局配置 `/etc/ld.so.conf.d/python-x.x.conf` 中的内容,并重新生成缓存: ```bash echo "/path/to/library" | sudo tee -a /etc/ld.so.conf.d/python-lib.conf sudo ldconfig ``` 另外,在个人用户的 shell 初始化脚本里也可以临时指定额外查位置作为补充措施之一: ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/custom/path/to/libs/ source ~/.bashrc ``` 以上步骤有助于确保程序能够顺利访问所请求的目标二进制接口定义。 --- #### 使用 LDFLAGS 参数显式声明 在编译阶段可通过传递特定标志给构建过程中的连接环节告知确切的位置信息。例如: ```bash ./configure --prefix=/desired/installation/dir \ LDFLAGS="-Wl,-rpath,/absolute/path/to/additional/libraries/" make && make install ``` 这样做的好处在于可以直接嵌入自定义搜索规则至最终产物内部而不必担心外部变动影响正常使用效果。 --- ### 总结 综上所述,针对 “Unable to find a match: libpython2.7.so.1.0” 这类报错现象可以从检查实际物理存储状况出发逐步排查直至修正完成整个流程链路的所有潜在隐患点为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值