天天看点

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

环境:centos7.5

ceph版本:12.2.1

  • 查看此时对​

    ​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_RESULT
    OUTPUT_QUIET
    ERROR_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​

      ​进行依次安装即可