# 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. 术语表