# 2.5。環境變量
> 原文: [http://numba.pydata.org/numba-doc/latest/reference/envvars.html](http://numba.pydata.org/numba-doc/latest/reference/envvars.html)
Numba 允許通過使用環境變量來改變其行為。除非另有說明,否則這些變量具有整數值且默認為零。
為方便起見,Numba 還支持使用配置文件來保留配置設置。注意:要使用此功能,必須安裝`pyyaml`。
配置文件必須命名為`.numba_config.yaml`并存在于調用 Python 解釋器的目錄中。在搜索環境變量之前,將讀取配置文件(如果存在)以進行配置設置。這意味著環境變量設置將覆蓋從配置文件獲取的設置(配置文件用于設置永久首選項,而環境變量用于短暫首選項)。
配置文件的格式是`YAML`格式的字典,它將下面的環境變量(沒有`NUMBA_`前綴)映射到所需的值。例如,要永久打開開發人員模式(`NUMBA_DEVELOPER_MODE`環境變量)并控制流程圖打印(`NUMBA_DUMP_CFG`環境變量),請創建一個包含以下內容的配置文件:
```py
developer_mode: 1
dump_cfg: 1
```
在想要使用基于終端背景顏色的設定顏色方案的情況下,這尤其有用。例如,如果終端背景顏色為黑色,則`dark_bg`顏色方案將非常適合,并且可以通過添加以下內容設置為永久使用:
```py
color_scheme: dark_bg
```
## 2.5.1。錯誤和警告顯示
```py
NUMBA_WARNINGS
```
如果設置為非零,則啟用 Numba 警告的打印輸出,否則將禁止警告。警告可以深入了解編譯過程。
## 2.5.2。調試
這些變量會影響 [JIT 函數](../glossary.html#term-jit-function)編譯過程中打印的內容。
```py
NUMBA_DEVELOPER_MODE
```
如果設置為非零,則開發人員模式會生成完整的回溯并禁用幫助說明。默認值為零。
```py
NUMBA_FULL_TRACEBACKS
```
如果設置為非零,則在發生異常時啟用完全回溯。默認為 <cite>NUMBA_DEVELOPER_MODE</cite> 設置的值。
```py
NUMBA_SHOW_HELP
```
如果未設置或設置為零,則顯示用戶級幫助信息。默認為 <cite>NUMBA_DEVELOPER_MODE</cite> 設置的值的否定。
```py
NUMBA_DISABLE_ERROR_MESSAGE_HIGHLIGHTING
```
如果設置為非零錯誤消息突出顯示被禁用。這對于在 CI 系統上運行測試套件非常有用。
```py
NUMBA_COLOR_SCHEME
```
更改錯誤報告中使用的顏色方案(需要安裝`colorama`包才能工作)。有效值為:
* `no_color`沒有添加顏色,只是粗體字體加權。
* `dark_bg`適用于背景較暗的終端。
* `light_bg`適用于背景較淺的終端。
* `blue_bg`適用于藍色背景的終端。
* `jupyter_nb`適用于 Jupyter 筆記本電腦。
_ 默認值:_ `no_color`。值的類型是`string`。
```py
NUMBA_DEBUG
```
如果設置為非零,則在函數編譯期間打印出所有可能的調試信息。使用下面的其他變量可以獲得更細粒度的控制。
```py
NUMBA_DEBUG_FRONTEND
```
如果設置為非零,則在編譯器前端的操作期間打印出調試信息,直到并包括 Numba 中間表示的生成。
```py
NUMBA_DEBUGINFO
```
如果設置為非零,則通過設置`jit`中`debug`選項的默認值,為整個應用程序啟用調試。請注意,啟用調試信息會顯著增加每個已編譯函數的內存消耗。默認值等于 <cite>NUMBA_ENABLE_PROFILING</cite> 的值。
```py
NUMBA_GDB_BINARY
```
設置`gdb`二進制文件以用于 Numba 的`gdb`支持,它采用路徑和二進制文件的全名,例如:`/path/from/root/to/binary/name_of_gdb_binary`這是為了允許使用來自非 COD3 的`gdb`具有非默認名稱的默認位置。如果未設置,則假定`gdb`位于`/usr/bin/gdb`。
```py
NUMBA_DEBUG_TYPEINFER
```
如果設置為非零,則打印出有關類型推斷的調試信息。
```py
NUMBA_DEBUG_CACHE
```
如果設置為非零,則打印出有關 [JIT 編譯緩存](../user/jit.html#jit-cache)操作的信息。
```py
NUMBA_ENABLE_PROFILING
```
啟用 LLVM 的 JIT 事件以支持 jitted 函數的分析。某些分析器下會自動啟用此選項。
```py
NUMBA_TRACE
```
如果設置為非零,則跟蹤某些函數調用(函數入口和出口事件,包括參數和返回值)。
```py
NUMBA_DUMP_BYTECODE
```
如果設置為非零,則打印出已編譯函數的 Python [字節碼](../glossary.html#term-bytecode)。
```py
NUMBA_DUMP_CFG
```
如果設置為非零,則打印出有關已編譯函數的控制流圖的信息。
```py
NUMBA_DUMP_IR
```
如果設置為非零,則打印出已編譯函數的 Numba Intermediate Representation。
```py
NUMBA_DUMP_ANNOTATION
```
如果設置為非零,則打印出已編譯函數的類型注釋。
```py
NUMBA_DUMP_LLVM
```
轉儲未經優化的 LLVM 匯編程序編譯函數源。未經優化的代碼通常非常冗長;因此,建議改用 [`NUMBA_DUMP_OPTIMIZED`](#envvar-NUMBA_DUMP_OPTIMIZED) 。
```py
NUMBA_DUMP_FUNC_OPT
```
在 LLVM“函數優化”通過之后但在“模塊優化”通過之前轉儲 LLVM 匯編程序源。這在開發 Numba 本身時很有用,否則使用 [`NUMBA_DUMP_OPTIMIZED`](#envvar-NUMBA_DUMP_OPTIMIZED) 。
```py
NUMBA_DUMP_OPTIMIZED
```
在所有優化過程之后轉儲已編譯函數的 LLVM 匯編器源。輸出包括 raw 函數以及與 CPython 兼容的包裝器(其名稱以`wrapper.`開頭)。請注意,該函數通常也會在包裝器內部內聯。
```py
NUMBA_DEBUG_ARRAY_OPT
```
轉儲與`parallel=True` jit 裝飾器選項相關的處理相關的調試信息。
```py
NUMBA_DEBUG_ARRAY_OPT_RUNTIME
```
轉儲與`parallel=True` jit 裝飾器選項關聯的運行時調度程序相關的調試信息。
```py
NUMBA_DEBUG_ARRAY_OPT_STATS
```
轉儲有關將多少個運算符/調用轉換為并行 for 循環以及多少融合在一起的統計信息,這些都與`parallel=True` jit 裝飾器選項相關聯。
```py
NUMBA_PARALLEL_DIAGNOSTICS
```
如果設置為 1 到 4(包括 1 和 4)之間的整數值,Numba 進行的并行變換的診斷信息將寫入 STDOUT。值越高,產生的信息越詳細。
```py
NUMBA_DUMP_ASSEMBLY
```
轉儲已編譯函數的本機匯編代碼。
也可以看看
[故障排除和提示](../user/troubleshoot.html#numba-troubleshooting)和 [Numba 架構](../developer/architecture.html#architecture)。
## 2.5.3。編譯選項
```py
NUMBA_OPT
```
優化水平;此選項直接傳遞給 LLVM。
_ 默認值:_ 3
```py
NUMBA_LOOP_VECTORIZE
```
如果設置為非零,則啟用 LLVM 循環向量化。
_ 默認值:_ 1(32 位 Windows 除外)
```py
NUMBA_ENABLE_AVX
```
如果設置為非零,則在 LLVM 中啟用 AVX 優化。默認情況下,Sandy Bridge 和 Ivy Bridge 架構禁用此功能,因為它有時會導致這些平臺上的代碼速度變慢。
```py
NUMBA_DISABLE_INTEL_SVML
```
如果設置為非零且 Intel SVML 可用,則將禁用 SVML。
```py
NUMBA_COMPATIBILITY_MODE
```
如果設置為非零,則 JIT 函數的編譯永遠不會完全失敗,而是生成一個簡單地解釋函數的回退。只有在從舊的 Numba 版本(0.12 之前)遷移大型代碼庫時才能使用它,并希望避免一次性破壞所有內容。否則,請不要使用它。
```py
NUMBA_DISABLE_JIT
```
完全禁用 JIT 編譯。 [`jit()`](jit-compilation.html#numba.jit "numba.jit") 裝飾器就像它不執行任何操作一樣,并且裝飾函數的調用調用原始 Python 函數而不是編譯版本。如果要在代碼上運行 Python 調試器,這可能很有用。
```py
NUMBA_CPU_NAME and NUMBA_CPU_FEATURES
```
覆蓋 CPU 和 CPU 功能檢測。通過設置`NUMBA_CPU_NAME=generic`,將為 CPU 體系結構選擇通用 CPU 模型,并且功能列表(`NUMBA_CPU_FEATURES`)默認為空。必須以`+feature1,-feature2`格式列出 CPU 功能,其中`+`表示啟用,`-`表示禁用。例如,`+sse,+sse2,-avx,-avx2`啟用 SSE 和 SSE2,并禁用 AVX 和 AVX2。
這些設置將傳遞給 LLVM 以配置編譯目標。要獲取可用選項列表,請使用 LLVM 中的`llc`命令行工具,例如:
```py
llc -march=x86 -mattr=help
```
小費
要強制所有緩存函數(`@jit(cache=True)`)發出可移植代碼(在同一架構和操作系統中可移植),只需設置`NUMBA_CPU_NAME=generic`即可。
```py
NUMBA_FUNCTION_CACHE_SIZE
```
覆蓋函數高速緩存的大小,以便在內存中保留最近反序列化的函數。在像 [Dask](http://dask.pydata.org) 這樣的系統中,通常會對函數進行多次反序列化。只要解釋器??中有某個引用,Numba 就會緩存函數。此高速緩存大小變量控制將保留不再引用的函數的數量,以防它們將來出現。這種實現并不是真正的 LRU,但是對于大多數情況來說,大尺寸的緩存應該足夠了。
_ 默認值:_ 128
## 2.5.4。 GPU 支持
```py
NUMBA_DISABLE_CUDA
```
如果設置為非零,則禁用 CUDA 支持。
```py
NUMBA_FORCE_CUDA_CC
```
如果設置,則強制 CUDA 計算功能為給定版本(類型為`major.minor`的字符串),而不考慮連接的設備。
```py
NUMBA_ENABLE_CUDASIM
```
如果設置,請不要編譯和執行 GPU 的代碼,而是使用 CUDA Simulator。用于調試目的。
## 2.5.5。線程控制
```py
NUMBA_NUM_THREADS
```
如果設置,則并行 CPU 目標的線程池中的線程數將采用此值。必須大于零。該值與`OMP_NUM_THREADS`和`MKL_NUM_THREADS`無關。
_ 默認值:_ 運行時確定的系統 CPU 核心數,可通過`numba.config.NUMBA_DEFAULT_NUM_THREADS`訪問。
```py
NUMBA_THREADING_LAYER
```
此環境變量控制用于 CPU 并行目標(`@vectorize(target='parallel')`,`@guvectorize(target='parallel')`和`@njit(parallel=True)`)的并發執行的庫。變量類型是字符串,默認情況下是`default`,它將根據運行時中可用的內容選擇線程層。有效值為(有關這些的更多信息,請參見[線程層文檔](../user/threading-layer.html#numba-threading-layer)):
* `default` - 根據當前運行時可用的內容選擇線程層。
* `safe` - 選擇一個既安全又安全的線程層(需要 TBB 包)。
* `forksafe` - 選擇叉安全的線程層。
* `threadsafe` - 選擇線程安全的線程層。
* `tbb` - 由英特爾 TBB 支持的線程層。
* `omp` - 由 OpenMP 支持的線程層。
* `workqueue` - 一個簡單的內置工作共享任務調度程序。
- 1. 用戶手冊
- 1.1。 Numba 的約 5 分鐘指南
- 1.2。概述
- 1.3。安裝
- 1.4。使用@jit 編譯 Python 代碼
- 1.5。使用@generated_jit 進行靈活的專業化
- 1.6。創建 Numpy 通用函數
- 1.7。用@jitclass 編譯 python 類
- 1.8。使用@cfunc 創建 C 回調
- 1.9。提前編譯代碼
- 1.10。使用@jit 自動并行化
- 1.11。使用@stencil裝飾器
- 1.12。從 JIT 代碼 中回調到 Python 解釋器
- 1.13。性能提示
- 1.14。線程層
- 1.15。故障排除和提示
- 1.16。常見問題
- 1.17。示例
- 1.18。會談和教程
- 2. 參考手冊
- 2.1。類型和簽名
- 2.2。即時編譯
- 2.3。提前編譯
- 2.4。公用事業
- 2.5。環境變量
- 2.6。支持的 Python 功能
- 2.7。支持的 NumPy 功能
- 2.8。與 Python 語義的偏差
- 2.9。浮點陷阱
- 2.10。 Python 2.7 壽命終止計劃
- 3. 用于 CUDA GPU 的 Numba
- 3.1。概述
- 3.2。編寫 CUDA 內核
- 3.3。內存管理
- 3.4。編寫設備功能
- 3.5。 CUDA Python 中支持的 Python 功能
- 3.6。支持的原子操作
- 3.7。隨機數生成
- 3.8。設備管理
- 3.10。示例
- 3.11。使用 CUDA 模擬器 調試 CUDA Python
- 3.12。 GPU 減少
- 3.13。 CUDA Ufuncs 和廣義 Ufuncs
- 3.14。共享 CUDA 內存
- 3.15。 CUDA 陣列接口
- 3.16。 CUDA 常見問題
- 4. CUDA Python 參考
- 4.1。 CUDA 主機 API
- 4.2。 CUDA 內核 API
- 4.3。內存管理
- 5. 用于 AMD ROC GPU 的 Numba
- 5.1。概述
- 5.2。編寫 HSA 內核
- 5.3。內存管理
- 5.4。編寫設備功能
- 5.5。支持的原子操作
- 5.6。代理商
- 5.7。 ROC Ufuncs 和廣義 Ufuncs
- 5.8。示例
- 6. 擴展 Numba
- 6.1。高級擴展 API
- 6.2。低級擴展 API
- 6.3。示例:間隔類型
- 7. 開發者手冊
- 7.1。貢獻給 Numba
- 7.2。 Numba 建筑
- 7.3。多態調度
- 7.4。關于發電機的注意事項
- 7.5。關于 Numba Runtime 的注意事項
- 7.6。使用 Numba Rewrite Pass 獲得樂趣和優化
- 7.7。實時變量分析
- 7.8。上市
- 7.9。模板注釋
- 7.10。關于自定義管道的注意事項
- 7.11。環境對象
- 7.12。哈希 的注意事項
- 7.13。 Numba 項目路線圖
- 8. Numba 增強建議
- 9. 術語表