从源代码构建 TensorFlow pip 包并将其安装在 Windows 上。
Windows 环境设置
安装以下构建工具以配置您的 Windows 开发环境。
安装 Python 和 TensorFlow 软件包依赖项
安装 适用于 Windows 的 Python 3.9+ 64 位版本。选择 pip 作为可选功能,并将其添加到您的 %PATH% 环境变量中。
安装 TensorFlow pip 软件包依赖项
pip3 install -U pippip3 install -U six numpy wheel packagingpip3 install -U keras_preprocessing --no-deps
依赖项列表位于 REQUIRED_PACKAGES 下的 setup.py 文件中。
安装 Bazel
安装 Bazel,这是用于编译 TensorFlow 的构建工具。有关 Bazel 版本,请参阅 Windows 的 已测试构建配置。配置 Bazel 以 构建 C++。
将 Bazel 可执行文件的位置添加到您的 %PATH% 环境变量中。
安装 MSYS2
安装 MSYS2 以获取构建 TensorFlow 所需的 bin 工具。如果 MSYS2 安装在 C:\msys64,请将 C:\msys64\usr\bin 添加到您的 %PATH% 环境变量中。然后,使用 cmd.exe 运行
pacman -Syu (requires a console restart) pacman -S git patch unzip pacman -S git patch unzip rsync
安装 Visual C++ Build Tools 2022
安装 Visual C++ build tools 2022。此工具随 Visual Studio Community 2022 一起提供,也可以单独安装。
- 前往 Visual Studio 下载页面,
- 选择 Visual Studio 或其他工具、框架和可再发行组件的工具,
- 下载并安装
- Visual Studio 2022 构建工具
- 适用于 Visual Studio 2022 的 Microsoft Visual C++ 可再发行组件
安装 LLVM
- 前往 LLVM 下载页面,
- 下载并安装 Windows 兼容的 LLVM(例如 LLVM-17.0.6-win64.exe),安装路径设为 C:/Program Files/LLVM
安装 GPU 支持(可选)
请参阅 Windows GPU 支持 指南,以安装在 GPU 上运行 TensorFlow 所需的驱动程序和其他软件。
下载 TensorFlow 源代码
使用 Git 克隆 TensorFlow 仓库(git 随 MSYS2 一起安装)
git clone https://github.com/tensorflow/tensorflow.gitcd tensorflow
仓库默认使用 master 开发分支。您也可以检出 发布分支 进行构建。
git checkout branch_name # r1.9, r1.10, etc.
可选:环境变量设置
在运行构建命令之前,请运行以下命令以避免软件包创建过程中出现问题:(如果在安装软件包时已设置了以下命令,请忽略)。运行 set 以检查所有路径是否设置正确,运行 echo %环境变量%(例如 echo %BAZEL_VC%)以检查特定环境变量的路径设置。
Python 路径设置问题 tensorflow:issue#59943,tensorflow:issue#9436,tensorflow:issue#60083
set PATH=path/to/python;%PATH% # [e.g. (C:/Python311)] set PATH=path/to/python/Scripts;%PATH% # [e.g. (C:/Python311/Scripts)] set PYTHON_BIN_PATH=path/to/python_virtualenv/Scripts/python.exe set PYTHON_LIB_PATH=path/to/python virtualenv/lib/site-packages set PYTHON_DIRECTORY=path/to/python_virtualenv/Scripts
Bazel/MSVC/CLANG 路径设置问题 tensorflow:issue#54578
set BAZEL_SH=C:/msys64/usr/bin/bash.exe set BAZEL_VS=C:/Program Files/Microsoft Visual Studio/2022/BuildTools set BAZEL_VC=C:/Program Files/Microsoft Visual Studio/2022/BuildTools/VC set Bazel_LLVM=C:/Program Files/LLVM (explicitly tell Bazel where LLVM is installed by BAZEL_LLVM, needed while using CLANG) set PATH=C:/Program Files/LLVM/bin;%PATH% (Optional, needed while using CLANG as Compiler)
可选:配置构建
TensorFlow 构建通过仓库根目录下的 .bazelrc 文件进行配置。./configure 或 ./configure.py 脚本可用于调整常用设置。
如果您需要更改配置,请从仓库根目录运行 ./configure 脚本。
python ./configure.py
此脚本会提示您输入 TensorFlow 依赖项的位置,并询问其他构建配置选项(例如编译器标志)。以下是 python ./configure.py 的示例运行(您的会话可能有所不同)
构建并安装 pip 软件包
pip 软件包的构建分为两步。bazel build 命令会创建一个“软件包构建器”程序。然后,您运行该构建器来创建软件包。
构建软件包构建器
tensorflow:master 仓库已更新为默认构建 2.x。安装 Bazel 并使用 bazel build 创建 TensorFlow 软件包构建器。
bazel build //tensorflow/tools/pip_package:wheel
仅 CPU
使用 bazel 构建仅支持 CPU 的 TensorFlow 软件包构建器
使用 MSVC 构建
bazel build --config=opt --repo_env=TF_PYTHON_VERSION=3.11 //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu
使用 CLANG 构建
使用 --config=win_clang 以使用 CLANG 编译器构建 TensorFlow
bazel build --config=win_clang --repo_env=TF_PYTHON_VERSION=3.11 //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu
GPU 支持
构建支持 GPU 的 TensorFlow 软件包构建器
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package
清理 bazel 缓存以解决因无效或过时缓存数据导致的错误的命令。bazel clean 配合 --expunge 标志可永久删除文件。
bazel clean bazel clean --expunge
Bazel 构建选项
构建时使用此选项以避免软件包创建过程中出现问题:tensorflow:issue#22390
--define=no_tensorflow_py_deps=true
从源代码构建 TensorFlow 可能会消耗大量内存。如果您的系统内存受限,请使用 --local_ram_resources=2048 限制 Bazel 的内存使用量。
如果使用 GPU 支持进行构建,请添加 --copt=-nvcc_options=disable-warnings 以抑制 nvcc 警告消息。
构建软件包
要构建 pip 软件包,您需要指定 --repo_env=WHEEL_NAME 标志。根据提供的名称,将创建相应的软件包。例如
构建 tensorflow CPU 软件包
bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu
要构建 nightly 软件包,请设置 tf_nightly 而不是 tensorflow,例如构建 CPU nightly 软件包
bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tf_nightly_cpu
结果,生成的 wheel 将位于
bazel-bin/tensorflow/tools/pip_package/wheel_house/
安装软件包
生成的 .whl 文件名取决于 TensorFlow 版本和您的平台。使用 pip install 安装该软件包,例如
pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl
使用 MSYS shell 构建
也可以使用 MSYS shell 构建 TensorFlow。请按如下方式进行更改,然后遵循之前有关 Windows 原生命令行 (cmd.exe) 的说明。
禁用 MSYS 路径转换
MSYS 会自动将看起来像 Unix 路径的参数转换为 Windows 路径,这在 bazel 中无法正常工作。(标签 //path/to:bin 因为以斜杠开头而被视为 Unix 绝对路径。)
export MSYS_NO_PATHCONV=1export MSYS2_ARG_CONV_EXCL="*"
设置 PATH
将 Bazel 和 Python 安装目录添加到您的 $PATH 环境变量中。如果 Bazel 安装在 C:\tools\bazel.exe,Python 安装在 C:\Python\python.exe,则设置 PATH 为
# Use Unix-style with ':' as separatorexport PATH="/c/tools:$PATH"export PATH="/c/path/to/Python:$PATH"
对于 GPU 支持,将 CUDA 和 cuDNN 的 bin 目录添加到您的 $PATH
export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0/bin:$PATH"export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0/extras/CUPTI/libx64:$PATH"export PATH="/c/tools/cuda/bin:$PATH"
已测试的构建配置
CPU
| 版本 | Python 版本 | 编译器 | 构建工具 |
|---|---|---|---|
| tensorflow-2.21.0 | 3.10-3.13 | CLANG 18.1.4 | Bazel 7.4.1 |
| tensorflow-2.20.0 | 3.9-3.13 | CLANG 18.1.4 | Bazel 7.4.1 |
| tensorflow-2.19.0 | 3.9-3.12 | CLANG 18.1.4 | Bazel 6.5.0 |
| tensorflow-2.18.0 | 3.9-3.12 | CLANG 17.0.6 | Bazel 6.5.0 |
| tensorflow-2.17.0 | 3.9-3.12 | CLANG 17.0.6 | Bazel 6.5.0 |
| tensorflow-2.16.1 | 3.9-3.12 | CLANG 17.0.6 | Bazel 6.5.0 |
| tensorflow-2.15.0 | 3.9-3.11 | MSVC 2019 | Bazel 6.1.0 |
| tensorflow-2.14.0 | 3.9-3.11 | MSVC 2019 | Bazel 6.1.0 |
| tensorflow-2.12.0 | 3.8-3.11 | MSVC 2019 | Bazel 5.3.0 |
| tensorflow-2.11.0 | 3.7-3.10 | MSVC 2019 | Bazel 5.3.0 |
| tensorflow-2.10.0 | 3.7-3.10 | MSVC 2019 | Bazel 5.1.1 |
| tensorflow-2.9.0 | 3.7-3.10 | MSVC 2019 | Bazel 5.0.0 |
| tensorflow-2.8.0 | 3.7-3.10 | MSVC 2019 | Bazel 4.2.1 |
| tensorflow-2.7.0 | 3.7-3.9 | MSVC 2019 | Bazel 3.7.2 |
| tensorflow-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 |
| tensorflow-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 |
| tensorflow-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 |
| tensorflow-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 |
| tensorflow-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.0.0 |
| tensorflow-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 |
| tensorflow-2.0.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 |
| tensorflow-1.15.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 |
| tensorflow-1.14.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.24.1-0.25.2 |
| tensorflow-1.13.0 | 3.5-3.7 | MSVC 2015 update 3 | Bazel 0.19.0-0.21.0 |
| tensorflow-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 |
| tensorflow-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 |
| tensorflow-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 |
| tensorflow-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 |
GPU
| 版本 | Python 版本 | 编译器 | 构建工具 | cuDNN | CUDA |
|---|---|---|---|---|---|
| tensorflow_gpu-2.10.0 | 3.7-3.10 | MSVC 2019 | Bazel 5.1.1 | 8.1 | 11.2 |
| tensorflow_gpu-2.9.0 | 3.7-3.10 | MSVC 2019 | Bazel 5.0.0 | 8.1 | 11.2 |
| tensorflow_gpu-2.8.0 | 3.7-3.10 | MSVC 2019 | Bazel 4.2.1 | 8.1 | 11.2 |
| tensorflow_gpu-2.7.0 | 3.7-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
| tensorflow_gpu-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
| tensorflow_gpu-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
| tensorflow_gpu-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 | 8.0 | 11.0 |
| tensorflow_gpu-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 | 7.6 | 10.1 |
| tensorflow_gpu-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.0.0 | 7.6 | 10.1 |
| tensorflow_gpu-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 | 7.6 | 10.1 |
| tensorflow_gpu-2.0.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 | 7.4 | 10 |
| tensorflow_gpu-1.15.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 | 7.4 | 10 |
| tensorflow_gpu-1.14.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.24.1-0.25.2 | 7.4 | 10 |
| tensorflow_gpu-1.13.0 | 3.5-3.7 | MSVC 2015 update 3 | Bazel 0.19.0-0.21.0 | 7.4 | 10 |
| tensorflow_gpu-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7.2 | 9.0 |
| tensorflow_gpu-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
| tensorflow_gpu-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
| tensorflow_gpu-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
| tensorflow_gpu-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
| tensorflow_gpu-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
| tensorflow_gpu-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
| tensorflow_gpu-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
| tensorflow_gpu-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
| tensorflow_gpu-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
| tensorflow_gpu-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
| tensorflow_gpu-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |