有兩種構(gòu)建 NumPy 的選項:
Gitpod
構(gòu)建你的選擇將會取決于你的操作系統(tǒng)以及對命令行的熟練程度。
Gitpod 是一個開源平臺,可以在你的瀏覽器中自動創(chuàng)建正確的開發(fā)環(huán)境,減少安裝本地開發(fā)環(huán)境和處理不兼容依賴項的需要。
如果你是 Windows 用戶,對于命令行的使用不熟悉或者是第一次構(gòu)建 NumPy,使用 Gitpod 來構(gòu)建通常會更快。下面是使用 Gitpod 構(gòu)建 NumPy 的深入說明。
在你的機(jī)器上本地構(gòu)建,可以為你提供更加精細(xì)的控制。如果你是熟悉命令行使用的 MacOS 或者 Linux 用戶,則可以按照下面的說明繼續(xù)在本地構(gòu)建 NumPy。
構(gòu)建 NumPy 前需要具備以下內(nèi)容:
numpy.f2py
測試需要它。如果未自動檢測到編譯器,則會跳過這些測試。site.cfg
位于 NumPy 根存儲庫或.numpy-site.cfg
主目錄中的文件中指定。有關(guān)site.cfg.example
文檔,請參閱NumPy 存儲庫或 sdist 中包含的示例文件,以及從環(huán)境變量指定搜索優(yōu)先級的下方。要安裝 NumPy,請運(yùn)行:
pip install numpy
要執(zhí)行可以從源文件夾運(yùn)行的就地構(gòu)建,請運(yùn)行:
python setup.py build-ext --inplace
注意:有關(guān)在 NumPy 本身上進(jìn)行開發(fā)工作的構(gòu)建說明,請參閱 設(shè)置和使用開發(fā)環(huán)境。
測試是為了確保你的構(gòu)建是否一切正常,請查看是否所有的測試都能夠通過:
$ python runtests.py -v -m full
有關(guān)測試的詳細(xì)信息,請參閱測試構(gòu)建。
可以使用以下方法進(jìn)行構(gòu)建:
python setup.py build -j 4 install --prefix $HOME/.local
將會在 4 個 CPU 上編譯 numpy 并將其安裝到指定的前綴中。要執(zhí)行并行就地構(gòu)建,請運(yùn)行:
python setup.py build-ext --inplace -j 4
還可以通過環(huán)境變量指定構(gòu)建作業(yè)的數(shù)量 NPY_NUM_BUILD_JOBS
。
編譯器是自動檢測的。使用特定編譯器可以使用 --fcompiler
,例如選擇 gfortran:
python setup.py build --fcompiler=gnu95
有更多的相關(guān)信息,可以通過以下命令參閱:
python setup.py build --help-fcompiler
檢查用于構(gòu)建庫的編譯器的一種相對簡單且可靠的方法是在庫上使用 ldd。如果 libg2c.so 是一個依賴項,這意味著已經(jīng)使用了 g77(注意:構(gòu)建NumPy不再支持g77)。如果 libgfortran.so 是依賴項,則已經(jīng)使用 gfortran。如果兩者都是依賴項,則意味著兩者都已經(jīng)使用,這幾乎是一個非常不好的方法。
NumPy 搜索優(yōu)化的線性代數(shù)庫,例如 BLAS 和 LAPACK。搜索這些庫有特定的順序,如下文和site.cfg.example
文件中所述:
請注意:正確優(yōu)化的NumPy構(gòu)建需要BLASh和CBLAS接口。 庫的默認(rèn)順序是:
可以通過定義環(huán)境變量來繞過對 BLAS 庫的檢測,該變量NPY_BLAS_LIBS
應(yīng)包含您要使用的確切鏈接器標(biāo)志(假設(shè)接口為 Fortran 77)。還定義?NPY_CBLAS_LIBS
(如果 CBLAS 包含在您的 BLAS 庫中,則為空)以觸發(fā) CBLAS 的使用并避免用于矩陣計算的緩慢回退代碼。
如果您希望針對 OpenBLAS 進(jìn)行構(gòu)建,但也有 BLIS 可用,則可以通過環(huán)境變量預(yù)定義搜索順序,該環(huán)境變量?NPY_BLAS_ORDER
是上述名稱的逗號分隔列表,用于確定要搜索的內(nèi)容,例如:
NPY_BLAS_ORDER=ATLAS,blis,openblas,MKL python setup.py build
將更喜歡使用 ATLAS,然后是 BLIS,然后是 OpenBLAS,并且作為最后的手段 MKL。如果這些都不存在,構(gòu)建將失?。Q比較小寫)。
或者,可以使用!
或^
否定所有項目:
NPY_BLAS_ORDER='^blas,atlas' python setup.py build
將允許使用任何東西,但NETLIB的BLAS和ATLAS庫,上面列表的順序被保留。 不能混合否定和肯定,也不能有多個否定,這種情況會引發(fā)錯誤。
可以通過定義環(huán)境變量來繞過 LAPACK 庫的檢測,該變量NPY_LAPACK_LIBS
應(yīng)包含您要使用的確切鏈接器標(biāo)志(假定語言為 Fortran 77)。
如果您希望針對 OpenBLAS 進(jìn)行構(gòu)建,但您也有 MKL 可用,則可以通過環(huán)境變量預(yù)定義搜索順序,該環(huán)境變量?NPY_LAPACK_ORDER
是上述名稱的逗號分隔列表,例如:
NPY_LAPACK_ORDER=ATLAS,openblas,MKL python setup.py build
將更喜歡使用 ATLAS,然后是 OpenBLAS,并且作為最后的手段 MKL。如果這些都不存在,構(gòu)建將失?。Q比較小寫)。
或者,可以使用!
或^
否定所有項目:
NPY_LAPACK_ORDER='^lapack' python setup.py build
將允許使用任何東西,但在NETLIB LAPACK庫,上面列表的順序被保留。
不能混合否定和肯定,也不能有多個否定,這種情況會引發(fā)錯誤。
可以通過以下方式禁用 ATLAS 和 NumPy 中其他加速庫的使用:
NPY_BLAS_ORDER= NPY_LAPACK_ORDER= python setup.py build
或者:
BLAS=None LAPACK=None ATLAS=None python setup.py build
您可以通過設(shè)置環(huán)境變量來告訴 Numpy 使用 64 位 BLAS/LAPACK 庫:
NPY_USE_BLAS_ILP64=1
在構(gòu)建 Numpy 時。支持以下 64 位 BLAS/LAPACK 庫:
64_
符號后綴 (?openblas64_
) 的OpenBLAS ILP64openblas_ilp64
)
它們的優(yōu)先順序由NPY_BLAS_ILP64_ORDER
和NPY_LAPACK_ILP64_ORDER
環(huán)境變量決定?。默認(rèn)值為openblas64_,openblas_ilp64
。
可以通過設(shè)置OPT
、?FOPT
(對于 Fortran)和CC
環(huán)境變量來提供額外的編譯器標(biāo)志。在提供應(yīng)該提高代碼性能的選項時,請確保您還設(shè)置-DNDEBUG
為不執(zhí)行調(diào)試代碼。
更多建議: