如何源碼安裝 SciPy v1.10.1 for Python3.8 Win32 科學計算擴展庫


SciPy 是可以為數學、科學、工程、等領域,提供基礎算法的開源 Python 擴展庫。

注意: 由於 SciPy 編譯過程復雜、問題多,很難成功,建議使用預構建包 (或迴退到使用舊版)。

本次有編譯 SciPy v1.8.1 (有修正缺失文件路徑, 後麵編譯 Fortran 相關源文件通不過)、1.9.3 (無法修正缺失文件路徑)、1.10.1 (無法修正缺失文件路徑),均未取得成功。

若不使用微軟 Windows 10 en-US 版進行編譯,一開始就會齣現 UnicodeDecodeError 異常 導緻無法繼續。

  1. Visual C/C++

  2. 需要安裝 16.0 v2019 以上 Visual Studio C/C++ Build Tools en-US 官方完整版。

    點擊 網盤 (提取碼: tyc0) 鏈接, 下載 v2019 或更高版本 Visual Studio C/C++ Build Tools。

  3. GFortran 編譯器

  4. 點擊 網盤 (提取碼: hr7k) 鏈接, 下載 i686-12.2.0-release-win32-dwarf-msvcrt-rt_v10-rev2.7z

    將下載文件 i686-12.2.0-release-win32-dwarf-msvcrt-rt_v10-rev2.7z 解壓到以下目錄

    D:/mingw32/
    						

    D:/mingw32/bin/ 目錄下有 gfortran.exe 編譯器可執行文件;把以下字符串

    D:/mingw32/bin/
    						

    添加到 控製颱配置 對話框/ 工作目錄 文本視圖。

  5. CMake 編譯器

  6. 點擊 網盤 (提取碼: 35gb) 鏈接, 下載 cmake-3.29.4-windows-i386.msi

    將下載文件 cmake-3.29.4-windows-i386.msi 安裝到以下目錄

    D:/CMake/
    							

    D:/CMake/bin/ 目錄下有 cmake.exe 編譯器可執行文件; 把以下字符串

    D:/CMake/bin/
    						

    添加到 控製颱配置 對話框/ 工作目錄 文本視圖。

  7. meson 依賴庫

  8. 控製颱 選項卡鍵入 meson v1.4.1 依賴庫安裝命令:

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade meson
    						

    將 meson 安裝到 Python 目錄下。

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade --user meson
    						

    將 meson 安裝到當前用戶 python 目錄 (如 C:/Users/用戶名/AppData/Local/python/) 下。

  9. pybind11 依賴庫

  10. 控製颱 選項卡鍵入 pybind11 v2.12.0 依賴庫安裝命令:

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pybind11
    						

    將 pybind11 安裝到 Python 目錄下。

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade --user pybind11
    						

    將 pybind11 安裝到當前用戶 python 目錄 (如 C:/Users/用戶名/AppData/Local/python/) 下。

  11. cython 依賴庫

  12. 控製颱 選項卡鍵入 cython v0.29.27 依賴庫安裝命令:

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade cython==0.29.27
    						

    將 cython 安裝到 Python 目錄下。

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade --user cython==0.29.27
    						

    將 cython 安裝到當前用戶 python 目錄 (如 C:/Users/用戶名/AppData/Local/python/) 下。

  13. numpy 依賴庫

  14. 控製颱 選項卡鍵入 numpy v1.22.4 (v1.23.0 將棄用 numpy.distutils, Python v3.12 將移除 distutils 內置模塊) 依賴庫安裝命令:

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade cython==1.22.4
    						

    將 numpy 安裝到 Python 目錄下。

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade --user cython==1.22.4
    						

    將 numpy 安裝到當前用戶 python 目錄 (如 C:/Users/用戶名/AppData/Local/python/) 下。

  15. pythran 依賴庫

  16. 控製颱 選項卡鍵入 pythran v0.16.1 依賴庫安裝命令:

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pythran
    						

    將 pythran 安裝到 Python 目錄下。

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade --user pythran
    						

    將 pythran 安裝到當前用戶 python 目錄 (如 C:/Users/用戶名/AppData/Local/python/) 下。

  17. setuptools 依賴庫

  18. 控製颱 選項卡,鍵入以下命令將 setuptools 內置庫版本切換到 70.0.0 或更高版本:

    Python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade setuptools==70.0.0
    						

    numpy v1.22.4 依賴庫要求必須使用 setuptools v70.0.0。

  19. OpenBLAS 編譯 (不需要)

  20. BLAS 比 Lapack 中的 netlib Blas 性能更好。

    BLAS 是 Basic Linear Algebra Subprograms 的縮寫,中文譯為 基本綫性代數子程序

    點擊 網盤 (提取碼: 1y0s) 鏈接, 下載 OpenBLAS-0.3.27.tar.gz 源代碼;將 OpenBLAS-0.3.27.tar.gz 解壓到以下目錄

    D:/OpenBLAS-0.3.27/
    						

    控製颱 選項卡鍵入下列命令,以共享庫方式編譯 OpenBLAS:

    cd D:/OpenBLAS-0.3.27
     
    mkdir build && cd build
    cmake .. -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=D:/OpenBLAS-0.3.27 -D BUILD_SHARED_LIBS=ON
     
    mingw32-make -j
    mingw32-make install
    						

    編譯完成後,為當前用戶添加以下環境變量 (需要重啓電腦)

    OPENBLAS = D:\OpenBLAS-0.3.27\lib
    						

    或添加到 控製颱配置 對話框/更多/ 添加變量 文本視圖 (不用重啓電腦)。

  21. Lapack 編譯

  22. 點擊 網盤 (提取碼: 1y0s) 鏈接, 下載 lapack-3.12.0.tar.gz 源代碼;將 lapack-3.12.0.tar.gz 解壓到以下目錄

    D:/lapack-3.12.0/
    						

    控製颱 選項卡鍵入下列命令,以共享庫方式編譯 lapack:

    cd D:/lapack-3.12.0
     
    mkdir build && cd build
    cmake .. -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=D:/lapack-3.12.0 -D BUILD_SHARED_LIBS=ON -D LAPACKE=ON -D CBLAS=ON
     
    mingw32-make -j
    mingw32-make install
    						

    或以靜態庫方式編譯 lapack:

    cd .. && rmdir /s /q build && mkdir build && cd build
    cmake .. -G "MinGW Makefiles" -D CMAKE_INSTALL_PREFIX=D:/lapack-3.12.0 -D BUILD_SHARED_LIBS=OFF -D LAPACKE=ON -D CBLAS=ON
     
    mingw32-make -j
    mingw32-make install
    						

    編譯完成後,為當前用戶添加以下環境變量 (需要重啓電腦)

    LAPACK = D:\lapack-3.12.0\bin
    LAPACK_SRC = D:\lapack-3.12.0\SRC
     
    BLAS = D:\lapack-3.12.0\bin
    BLAS_SRC = D:\lapack-3.12.0\SRC
    						

    或添加到 控製颱配置 對話框/更多/ 添加變量 文本視圖 (不用重啓電腦)。

  23. Boost 編譯 (不需要)

  24. 點擊 網盤 (提取碼: 1y0s) 鏈接, 下載 boost_1_85_0.7z 源代碼;將 boost_1_85_0.7z 解壓到以下目錄

    D:/boost_1_85_0/
    						

    控製颱 選項卡鍵入下列命令,以共享庫方式編譯 Boost:

    cd D:/boost_1_85_0
    bootstrap.bat # 編譯生成 b2.exe
     
    b2 --help
    b2 stage --build-type=complete --toolset=gcc --stagedir="D:\boost_1_85_0\build" link=shared runtime-link=shared threading=multi debug release
    						

    迴到 控製颱 選項卡,把以下字符串

    D:/boost_1_85_0/bulid/mingw/lib/
    						

    添加到 控製颱配置 對話框/ 工作目錄 文本視圖。

  25. 源碼獲取

  26. 點擊 網盤 (提取碼: 1y0s) 鏈接, 下載 scipy-1.10.1.zip 源代碼。

    將 scipy-1.10.1.zip 解壓到以下目錄

    D:/Python38-32/scipy-1.10.1/
    							

  27. 源碼編譯

  28. 迴到 控製颱 選項卡,把以下字符串

    D:/Python38-32/
    D:/Python38-32/Scripts/
    						

    添加到 控製颱配置 對話框/ 工作目錄 文本視圖。

    鍵入以下 DOS 命令 進入 scipy v1.10.1 源碼目錄:

    cd D:/Python38-32/scipy-1.10.1/
    						

    鍵入以下 Python 擴展模塊通用編譯命令,開始編譯 scipy v1.10.1 源碼:

    python setup.py bdist_wheel
    python setup.py build
    						
  29. 異常處理

    1. 編譯 scipy-1.10.1/scipy/stats/_generate_pyx.py 文件時,若引發
    2. UnicodeDecodeError: 'gbk' codec can't decode byte 0x93 in position 52813: illegal multibyte sequence
      							

      將 scipy-1.10.1/scipy/stats/_generate_pyx.py 文件中的以下源代碼

      def make_unuran(srcdir, outdir):
          """Substitute True/False values for NPY_OLD Cython build variable."""
       
          import re
          with open(srcdir / "unuran_wrapper.pyx.templ", "r") as src:
              contents = src.read()
          with open(outdir / "unuran_wrapper.pyx", "w") as dest:
              dest.write(re.sub("DEF NPY_OLD = isNPY_OLD", f"DEF NPY_OLD = {isNPY_OLD()}", contents))
      							

      修改成

      def make_unuran(srcdir, outdir):
          """Substitute True/False values for NPY_OLD Cython build variable."""
       
          import re
          with open(srcdir / "unuran_wrapper.pyx.templ", "r", errors="ignore") as src:
              contents = src.read()
          with open(outdir / "unuran_wrapper.pyx", "w") as dest:
              dest.write(re.sub("DEF NPY_OLD = isNPY_OLD", f"DEF NPY_OLD = {isNPY_OLD()}", contents))
      							
    3. 編譯 scipy-1.10.1/scipy/stats/_unuran/unuran_wrapper.pyx 文件時,若引發
    4. unuran_wrapper.pyx:109:9: Decoding error, missing or incorrect coding=<encoding-name> at top of source (cannot decode with encoding 'utf-8': invalid continuation byte)
      							

      注意: 若存在此問題且無法解決,請使用微軟 Windows 10 en-US 版進行編譯。

版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。