首页 > 编译ceph源码:cython module not found问题的解决

编译ceph源码:cython module not found问题的解决

环境:centos7.5

ceph版本:12.2.1

在当前环境对ceph源码rpm包进行重新编译

执行命令rpmbuild --rebuild ceph-12.2.1-0.el7.src.rpm

最后出现错误如下:

Could not find cython3. Please install Cython.

  • 查看此时对Cython3模块的编译规则

    vim /BUILD/ceph-12.2.1/cmake/modules/FindCython.cmake
    SET(Cython${ PYTHON_VERSION}_FOUND FALSE)
    # Try to run Cython, to make sure it works:
    execute_process(COMMAND ${ PYTHON${ PYTHON_VERSION}_EXECUTABLE} -m cython --version #为此时执行的命令RESULT_VARIABLE CYTHON_RESULTOUTPUT_QUIETERROR_QUIET)
    if (CYTHON_RESULT EQUAL 0)SET(Cython${ PYTHON_VERSION}_FOUND TRUE)
    endif (CYTHON_RESULT EQUAL 0)IF (Cython${ PYTHON_VERSION}_FOUND)IF (NOT Cython_FIND_QUIETLY)MESSAGE(STATUS "Found cython${PYTHON_VERSION}")ENDIF (NOT Cython_FIND_QUIETLY)
    ELSE (Cython${ PYTHON_VERSION}_FOUND)IF (Cython_FIND_REQUIRED)MESSAGE(FATAL_ERROR "Could not find cython${PYTHON_VERSION}. Please install Cython.")#命令执行失败,没有找到cython模块的打印#增加如下一行,来进行执行命令的打印MESSAGE(FATAL_ERROR ${ PYTHON${ PYTHON_VERSION}_EXECUTABLE} -m cython --version )ENDIF (Cython_FIND_REQUIRED)
    ENDIF (Cython${ PYTHON_VERSION}_FOUND)
    
  • 通过以上过程确认到在编译过程中执行如下命令报出错误:

    /usr/bin/python3 -m cython --version

    则单独执行该命令报出如下错误
    cython module not found问题的解决
    
  • 此时问题非常明显,我们环境中的python3版本cython模块缺失

    再次确认该问题,执行如下命令
    [node1@localhost build]$ which python3 #查看python3的绝对路径
    /usr/bin/python3
    [node1@localhost build]$ /usr/bin/python3 --version #查看当前python3的版本
    Python 3.6.8
    [node1@localhost build]$ cd /usr/lib/python3.6/site_packages/ #进入到python3.6.8版本的lib库目录
    #发现该目录为空
    
  • 此时问题已经确认,python3.6.8版本未完全安装,尝试解决cython module的问题

    在cython官网下载最新的Cython-0.29.10.tar.gz代码,执行如下步骤进行安装
    cd Cython0.29.10#这里一定要加python对应的版本,我们是python3获取不到cython模块,所以要安装对应的python3版本的cython
    /usr/bin/python3 setup.py install
    
  • 安装好python3的cython模块,但是因为python3.6.8很多动态库都没有装上,后续仍然会有很多python3的库问题

    这里建议重新安装python3.6.8版本,进入python官网,下载python3.6.8源码的tar包

    执行如下步骤进行源码的编译安装
    #解压压缩包
    tar xzvf Python-3.6.8.tgz
    cd Python-3.6.8
    # 编译安装
    #./configure --help查看编译参数
    #默认安装在'/usr/local/bin','/usr/local/lib' etc
    #可以通过参数指定如:--prefix=/usr/local/python3
    #这里我将我python3.6.8的安装路径放在/usr目录下,它会自己将可执行文件放到/usr/bin目录下,动态库已经模块放到/usr/lib目录下
    ./configure --prefix=/usr/ 
    make && make install	 
    
  • 安装成功之后再次确认/usr/lib/python3.6/site_packages/目录库是否足够,如果此时再次出现cython缺失,那么按照我们进行cython源码安装的步骤再次使用python3进行依次安装即可

此时问题我们再次执行rpmbuild --rebuild ceph-12.2.1-0.el7.src.rpm可以成功执行下去。综上,我们的问题仍然是操作系统对应的python3未安装完全导致,如果设备联通外网,可以重新yum update python3或者yum upgrade python3即可

更多相关:

  • 缘由 我想安装一个python模块you-get,发现只能使用pip3安装,但是我发现我的Ubuntu 16.04.6 LTS上有python3.5,但是没有pip3,也无法成功安装,真是要了我的老命!网上调研一番后,发现直接从python的官网下载最新的python3.7的源码来升级python3这个思路是最可行的办法。因为pyt...

  • 我也遇到过这个问题.这可能不是理想的方式,但它有效.我做了以下事情来解决这个问题 –sudo apt-get install python3-gdbm这为python3安装了gdbm库,但是因为apt-get和anaconda是两个独立的包管理器;这不会解决你的问题.我们主要这样做是为了获取.so共享库,我们将把它放在我们的anaco...

  • 1、去官网下载和自己系统匹配的文件:  英文网址:https://nodejs.org/en/download/  中文网址:http://nodejs.cn/download/  通过  uname -a  命令查看到我的Linux系统位数是64位(备注:x86_64表示64位系统, i686 i386表示32位系统),如图...

  • 一、简介 LLVM LLVM(之前称为低级虚拟机Low Level Virtual Machine)是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时、链接时和运行时优化而设计。LLVM 可运行于若干个不同的平台之上,它以能够生成快速运行的代码而著称。 LLVM以C++编写而成,对开发者保持开放,并...

  • Ubuntu 12.04 64bit中安装firefox 26中的flash player插件的方法 昨天, 有最新的firefox 26更新了,可是我在软件更新中无法下载到ubuntu官方源中的flash plugin,详细的情况可以参见如下网页,这个问题我一年前也遇到过,特记录下来,以备后来查阅. http://blog....

  • 问题:使用 QT 编写视频展现程序报错找不到运行时库文件 解决办法: 首先 sudo find / -name libpulse.so* 然后 sudo cp /usr/lib/x86_64-linux-gnu/libpulse.so.0 /usr/lib/libpulse.so 对于libpulse-mainloop-glib...