天天看點

編譯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​

      ​進行依次安裝即可