Skip to content

Commit 88851bc

Browse files
author
oppenheimli
committed
feat(build_deps): Remove unused cudnn for lite deployment
1 parent b3bc3d4 commit 88851bc

File tree

11 files changed

+40
-202
lines changed

11 files changed

+40
-202
lines changed

README.md

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -104,26 +104,24 @@ is compiled differently. A typical example of this would be `conda`-installed Te
104104
#### Compatibility Matrix
105105
*GPU is supported by version `0.2.0` and later.*
106106

107-
| TFRA | TensorFlow | Compiler | CUDA | CUDNN | Compute Capability | CPU |
108-
|:------|:-----------|:-----------|:-----|:------|:-----------------------------|:---------|
109-
| 0.8.0 | 2.16.2 | GCC 8.2.1 | 12.3 | 8.9 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 | x86 |
110-
| 0.8.0 | 2.16.2 | Xcode 13.1 | - | - | - | Apple M1 |
111-
| 0.7.0 | 2.15.1 | GCC 8.2.1 | 12.2 | 8.9 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 | x86 |
112-
| 0.7.0 | 2.15.1 | Xcode 13.1 | - | - | - | Apple M1 |
113-
| 0.6.0 | 2.8.3 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
114-
| 0.6.0 | 2.6.0 | Xcode 13.1 | - | - | - | Apple M1 |
115-
| 0.5.1 | 2.8.3 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
116-
| 0.5.1 | 2.6.0 | Xcode 13.1 | - | - | - | Apple M1 |
117-
| 0.5.0 | 2.8.3 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
118-
| 0.5.0 | 2.6.0 | Xcode 13.1 | - | - | - | Apple M1 |
119-
| 0.4.0 | 2.5.1 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
120-
| 0.4.0 | 2.5.0 | Xcode 13.1 | - | - | - | Apple M1 |
121-
| 0.3.1 | 2.5.1 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
122-
| 0.2.0 | 2.4.1 | GCC 7.3.1 | 11.0 | 8.0 | 6.0, 6.1, 7.0, 7.5, 8.0 | x86 |
123-
| 0.2.0 | 1.15.2 | GCC 7.3.1 | 10.0 | 7.6 | 6.0, 6.1, 7.0, 7.5 | x86 |
124-
| 0.1.0 | 2.4.1 | GCC 7.3.1 | - | - | - | x86 |
125-
126-
Check [nvidia-support-matrix](https://docs.nvidia.com/deeplearning/cudnn/support-matrix/index.html) for more details.
107+
| TFRA | TensorFlow | Compiler | CUDA | Compute Capability | CPU |
108+
|:------|:-----------|:-----------|:-----|:-----------------------------|:---------|
109+
| 0.8.0 | 2.16.2 | GCC 8.2.1 | 12.3 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 | x86 |
110+
| 0.8.0 | 2.16.2 | Xcode 13.1 | - | - | Apple M1 |
111+
| 0.7.0 | 2.15.1 | GCC 8.2.1 | 12.2 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 | x86 |
112+
| 0.7.0 | 2.15.1 | Xcode 13.1 | - | - | Apple M1 |
113+
| 0.6.0 | 2.8.3 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
114+
| 0.6.0 | 2.6.0 | Xcode 13.1 | - | - | Apple M1 |
115+
| 0.5.1 | 2.8.3 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
116+
| 0.5.1 | 2.6.0 | Xcode 13.1 | - | - | Apple M1 |
117+
| 0.5.0 | 2.8.3 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
118+
| 0.5.0 | 2.6.0 | Xcode 13.1 | - | - | Apple M1 |
119+
| 0.4.0 | 2.5.1 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
120+
| 0.4.0 | 2.5.0 | Xcode 13.1 | - | - | Apple M1 |
121+
| 0.3.1 | 2.5.1 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 | x86 |
122+
| 0.2.0 | 2.4.1 | GCC 7.3.1 | 11.0 | 6.0, 6.1, 7.0, 7.5, 8.0 | x86 |
123+
| 0.2.0 | 1.15.2 | GCC 7.3.1 | 10.0 | 6.0, 6.1, 7.0, 7.5 | x86 |
124+
| 0.1.0 | 2.4.1 | GCC 7.3.1 | - | - | x86 |
127125

128126
**NOTICE**
129127

@@ -178,9 +176,7 @@ export TF_VERSION="2.15.1" # "2.11.0" is well tested.
178176
export PY_VERSION="3.9"
179177
export TF_NEED_CUDA=1
180178
export TF_CUDA_VERSION=12.2 # nvcc --version to check version
181-
export TF_CUDNN_VERSION=8.9 # print("cuDNN version:", tf.sysconfig.get_build_info()["cudnn_version"])
182179
export CUDA_TOOLKIT_PATH="/usr/local/cuda"
183-
export CUDNN_INSTALL_PATH="/usr/lib/x86_64-linux-gnu"
184180

185181
python configure.py
186182
```
@@ -284,18 +280,18 @@ sess_config.gpu_options.allow_growth = True
284280
### With TensorFlow Serving
285281

286282
#### Compatibility Matrix
287-
| TFRA | TensorFlow | Serving branch | Compiler | CUDA | CUDNN | Compute Capability |
288-
|:------|:-----------|:---------------|:----------|:-----|:------|:-----------------------------|
289-
| 0.8.0 | 2.16.2 | r2.16 | GCC 8.2.1 | 12.3 | 8.9 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 |
290-
| 0.7.0 | 2.15.1 | r2.15 | GCC 8.2.1 | 12.2 | 8.9 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 |
291-
| 0.6.0 | 2.8.3 | r2.8 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
292-
| 0.5.1 | 2.8.3 | r2.8 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
293-
| 0.5.0 | 2.8.3 | r2.8 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
294-
| 0.4.0 | 2.5.1 | r2.5 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
295-
| 0.3.1 | 2.5.1 | r2.5 | GCC 7.3.1 | 11.2 | 8.1 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
296-
| 0.2.0 | 2.4.1 | r2.4 | GCC 7.3.1 | 11.0 | 8.0 | 6.0, 6.1, 7.0, 7.5, 8.0 |
297-
| 0.2.0 | 1.15.2 | r1.15 | GCC 7.3.1 | 10.0 | 7.6 | 6.0, 6.1, 7.0, 7.5 |
298-
| 0.1.0 | 2.4.1 | r2.4 | GCC 7.3.1 | - | - | - |
283+
| TFRA | TensorFlow | Serving branch | Compiler | CUDA | Compute Capability |
284+
|:------|:-----------|:---------------|:----------|:-----|:-----------------------------|
285+
| 0.8.0 | 2.16.2 | r2.16 | GCC 8.2.1 | 12.3 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 |
286+
| 0.7.0 | 2.15.1 | r2.15 | GCC 8.2.1 | 12.2 | 7.0, 7.5, 8.0, 8.6, 8.9, 9.0 |
287+
| 0.6.0 | 2.8.3 | r2.8 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
288+
| 0.5.1 | 2.8.3 | r2.8 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
289+
| 0.5.0 | 2.8.3 | r2.8 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
290+
| 0.4.0 | 2.5.1 | r2.5 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
291+
| 0.3.1 | 2.5.1 | r2.5 | GCC 7.3.1 | 11.2 | 6.0, 6.1, 7.0, 7.5, 8.0, 8.6 |
292+
| 0.2.0 | 2.4.1 | r2.4 | GCC 7.3.1 | 11.0 | 6.0, 6.1, 7.0, 7.5, 8.0 |
293+
| 0.2.0 | 1.15.2 | r1.15 | GCC 7.3.1 | 10.0 | 6.0, 6.1, 7.0, 7.5 |
294+
| 0.1.0 | 2.4.1 | r2.4 | GCC 7.3.1 | - | - |
299295

300296
Serving TFRA-enable models by custom ops in TensorFlow Serving.
301297

build_deps/toolchains/gpu/cuda/BUILD.tpl

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -117,27 +117,6 @@ cc_library(
117117
visibility = ["//visibility:public"],
118118
)
119119

120-
cc_library(
121-
name = "cudnn",
122-
srcs = ["cuda/lib/%{cudnn_lib}"],
123-
data = ["cuda/lib/%{cudnn_lib}"],
124-
includes = [
125-
".",
126-
"cuda/include",
127-
],
128-
linkstatic = 1,
129-
visibility = ["//visibility:public"],
130-
)
131-
132-
cc_library(
133-
name = "cudnn_header",
134-
includes = [
135-
".",
136-
"cuda/include",
137-
],
138-
visibility = ["//visibility:public"],
139-
)
140-
141120
cc_library(
142121
name = "cufft",
143122
srcs = ["cuda/lib/%{cufft_lib}"],
@@ -169,7 +148,6 @@ cc_library(
169148
":cublas",
170149
":cuda_headers",
171150
":cudart",
172-
":cudnn",
173151
":cufft",
174152
":curand",
175153
],

build_deps/toolchains/gpu/cuda/BUILD.windows.tpl

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,6 @@ cc_import(
9191
visibility = ["//visibility:public"],
9292
)
9393

94-
cc_import(
95-
name = "cudnn",
96-
interface_library = "cuda/lib/%{cudnn_lib}",
97-
system_provided = 1,
98-
visibility = ["//visibility:public"],
99-
)
100-
101-
cc_library(
102-
name = "cudnn_header",
103-
includes = [
104-
".",
105-
"cuda/include",
106-
],
107-
visibility = ["//visibility:public"],
108-
)
109-
11094
cc_import(
11195
name = "cufft",
11296
interface_library = "cuda/lib/%{cufft_lib}",
@@ -128,7 +112,6 @@ cc_library(
128112
":cublas",
129113
":cuda_headers",
130114
":cudart",
131-
":cudnn",
132115
":cufft",
133116
":curand",
134117
],

build_deps/toolchains/gpu/cuda/cuda_config.h.tpl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ limitations under the License.
1919
#define TF_CUDA_CAPABILITIES %{cuda_compute_capabilities}
2020

2121
#define TF_CUDA_VERSION "%{cuda_version}"
22-
#define TF_CUDNN_VERSION "%{cudnn_version}"
2322

2423
#define TF_CUDA_TOOLKIT_PATH "%{cuda_toolkit_path}"
2524

build_deps/toolchains/gpu/cuda_configure.bzl

Lines changed: 7 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@
66
* `TF_CUDA_CLANG`: Whether to use clang as a cuda compiler.
77
* `CLANG_CUDA_COMPILER_PATH`: The clang compiler path that will be used for
88
both host and device code compilation if TF_CUDA_CLANG is 1.
9-
* `TF_CUDA_PATHS`: The base paths to look for CUDA and cuDNN. Default is
9+
* `TF_CUDA_PATHS`: The base paths to look for CUDA. Default is
1010
`/usr/local/cuda,usr/`.
1111
* `CUDA_TOOLKIT_PATH`: The path to the CUDA toolkit. Default is
1212
`/usr/local/cuda`.
1313
* `TF_CUDA_VERSION`: The version of the CUDA toolkit. If this is blank, then
1414
use the system default.
15-
* `TF_CUDNN_VERSION`: The version of the cuDNN library.
16-
* `CUDNN_INSTALL_PATH`: The path to the cuDNN library. Default is
17-
`/usr/local/cuda`.
1815
* `TF_CUDA_COMPUTE_CAPABILITIES`: The CUDA compute capabilities. Default is
1916
`3.5,5.2`.
2017
* `PYTHON_BIN_PATH`: The python binary path
@@ -40,10 +37,6 @@ _CUDA_TOOLKIT_PATH = "CUDA_TOOLKIT_PATH"
4037

4138
_TF_CUDA_VERSION = "TF_CUDA_VERSION"
4239

43-
_TF_CUDNN_VERSION = "TF_CUDNN_VERSION"
44-
45-
_CUDNN_INSTALL_PATH = "CUDNN_INSTALL_PATH"
46-
4740
_TF_CUDA_COMPUTE_CAPABILITIES = "TF_CUDA_COMPUTE_CAPABILITIES"
4841

4942
_TF_DOWNLOAD_CLANG = "TF_DOWNLOAD_CLANG"
@@ -554,12 +547,12 @@ def _find_cuda_lib(
554547
basedir,
555548
version,
556549
static = False):
557-
"""Finds the given CUDA or cuDNN library on the system.
550+
"""Finds the given CUDA library on the system.
558551
Args:
559552
lib: The name of the library, such as "cudart"
560553
repository_ctx: The repository context.
561554
cpu_value: The name of the host operating system.
562-
basedir: The install directory of CUDA or cuDNN.
555+
basedir: The install directory of CUDA.
563556
version: The version of the library.
564557
static: True if static library, False if shared object.
565558
Returns:
@@ -581,7 +574,7 @@ def _find_cuda_lib(
581574
)
582575

583576
def _find_libs(repository_ctx, cuda_config):
584-
"""Returns the CUDA and cuDNN libraries on the system.
577+
"""Returns the CUDA libraries on the system.
585578
Args:
586579
repository_ctx: The repository context.
587580
cuda_config: The CUDA config as returned by _get_cuda_config
@@ -641,13 +634,6 @@ def _find_libs(repository_ctx, cuda_config):
641634
cuda_config.config["cufft_library_dir"],
642635
cuda_config.cufft_version,
643636
),
644-
"cudnn": _find_cuda_lib(
645-
"cudnn",
646-
repository_ctx,
647-
cpu_value,
648-
cuda_config.config["cudnn_library_dir"],
649-
cuda_config.cudnn_version,
650-
),
651637
"cupti": _find_cuda_lib(
652638
"cupti",
653639
repository_ctx,
@@ -668,14 +654,12 @@ def _get_cuda_config(repository_ctx):
668654
Returns:
669655
A struct containing the following fields:
670656
cuda_toolkit_path: The CUDA toolkit installation directory.
671-
cudnn_install_basedir: The cuDNN installation directory.
672657
cuda_version: The version of CUDA on the system.
673658
cudart_version: The CUDA runtime version on the system.
674-
cudnn_version: The version of cuDNN on the system.
675659
compute_capabilities: A list of the system's CUDA compute capabilities.
676660
cpu_value: The name of the host operating system.
677661
"""
678-
config = find_cuda_config(repository_ctx, ["cuda", "cudnn"])
662+
config = find_cuda_config(repository_ctx, ["cuda"])
679663
cpu_value = get_cpu_value(repository_ctx)
680664
toolkit_path = config["cuda_toolkit_path"]
681665

@@ -685,7 +669,6 @@ def _get_cuda_config(repository_ctx):
685669
cuda_minor = cuda_version[1]
686670

687671
cuda_version = ("64_%s%s" if is_windows else "%s.%s") % (cuda_major, cuda_minor)
688-
cudnn_version = ("64_%s" if is_windows else "%s") % config["cudnn_version"]
689672

690673
if int(cuda_major) >= 11:
691674
# The libcudart soname in CUDA 11.x is versioned as 11.0 for backward compatability.
@@ -721,7 +704,6 @@ def _get_cuda_config(repository_ctx):
721704
cusolver_version = cusolver_version,
722705
curand_version = curand_version,
723706
cufft_version = cufft_version,
724-
cudnn_version = cudnn_version,
725707
compute_capabilities = compute_capabilities(repository_ctx, cuda_version),
726708
cpu_value = cpu_value,
727709
config = config,
@@ -769,7 +751,6 @@ def _create_dummy_repository(repository_ctx):
769751
"%{cudart_lib}": lib_name("cudart", cpu_value),
770752
"%{cublas_lib}": lib_name("cublas", cpu_value),
771753
"%{cusolver_lib}": lib_name("cusolver", cpu_value),
772-
"%{cudnn_lib}": lib_name("cudnn", cpu_value),
773754
"%{cufft_lib}": lib_name("cufft", cpu_value),
774755
"%{curand_lib}": lib_name("curand", cpu_value),
775756
"%{cupti_lib}": lib_name("cupti", cpu_value),
@@ -782,7 +763,6 @@ def _create_dummy_repository(repository_ctx):
782763
# tensorflow/core/platform/default/build_config:cuda.
783764
repository_ctx.file("cuda/cuda/include/cuda.h")
784765
repository_ctx.file("cuda/cuda/include/cublas.h")
785-
repository_ctx.file("cuda/cuda/include/cudnn.h")
786766
repository_ctx.file("cuda/cuda/extras/CUPTI/include/cupti.h")
787767
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cuda", cpu_value))
788768
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cudart", cpu_value))
@@ -791,7 +771,6 @@ def _create_dummy_repository(repository_ctx):
791771
)
792772
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cublas", cpu_value))
793773
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cusolver", cpu_value))
794-
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cudnn", cpu_value))
795774
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("curand", cpu_value))
796775
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cufft", cpu_value))
797776
repository_ctx.file("cuda/cuda/lib/%s" % lib_name("cupti", cpu_value))
@@ -896,7 +875,6 @@ def _create_local_cuda_repository(repository_ctx):
896875

897876
cuda_include_path = cuda_config.config["cuda_include_dir"]
898877
cublas_include_path = cuda_config.config["cublas_include_dir"]
899-
cudnn_header_dir = cuda_config.config["cudnn_include_dir"]
900878
cupti_header_dir = cuda_config.config["cupti_include_dir"]
901879
nvvm_libdevice_dir = cuda_config.config["nvvm_library_dir"]
902880

@@ -957,46 +935,6 @@ def _create_local_cuda_repository(repository_ctx):
957935
out_dir = "cuda/bin",
958936
))
959937

960-
# Copy cudnn.h if cuDNN was not installed to CUDA_TOOLKIT_PATH.
961-
included_files = _read_dir(repository_ctx, cuda_include_path)
962-
if not any([file.endswith("cudnn.h") for file in included_files]):
963-
cudnn_headers = ["cudnn.h"]
964-
if cuda_config.cudnn_version.rsplit("_", 1)[-1] >= "9":
965-
cudnn_headers += [
966-
"cudnn_adv.h",
967-
"cudnn_backend.h",
968-
"cudnn_cnn.h",
969-
"cudnn_graph.h",
970-
"cudnn_ops.h",
971-
"cudnn_version.h",
972-
]
973-
elif cuda_config.cudnn_version.rsplit("_", 1)[-1] >= "8":
974-
cudnn_headers += [
975-
"cudnn_backend.h",
976-
"cudnn_adv_infer.h",
977-
"cudnn_adv_train.h",
978-
"cudnn_cnn_infer.h",
979-
"cudnn_cnn_train.h",
980-
"cudnn_ops_infer.h",
981-
"cudnn_ops_train.h",
982-
"cudnn_version.h",
983-
]
984-
985-
cudnn_srcs = []
986-
cudnn_outs = []
987-
for header in cudnn_headers:
988-
cudnn_srcs.append(cudnn_header_dir + "/" + header)
989-
cudnn_outs.append("cudnn/include/" + header)
990-
991-
copy_rules.append(make_copy_files_rule(
992-
repository_ctx,
993-
name = "cudnn-include",
994-
srcs = cudnn_srcs,
995-
outs = cudnn_outs,
996-
))
997-
else:
998-
copy_rules.append("filegroup(name = 'cudnn-include')\n")
999-
1000938
# Set up BUILD file for cuda/
1001939
_tpl(
1002940
repository_ctx,
@@ -1017,13 +955,12 @@ def _create_local_cuda_repository(repository_ctx):
1017955
"%{cudart_lib}": cuda_libs["cudart"].basename,
1018956
"%{cublas_lib}": cuda_libs["cublas"].basename,
1019957
"%{cusolver_lib}": cuda_libs["cusolver"].basename,
1020-
"%{cudnn_lib}": cuda_libs["cudnn"].basename,
1021958
"%{cufft_lib}": cuda_libs["cufft"].basename,
1022959
"%{curand_lib}": cuda_libs["curand"].basename,
1023960
"%{cupti_lib}": cuda_libs["cupti"].basename,
1024961
"%{copy_rules}": "\n".join(copy_rules),
1025962
"%{cuda_headers}": (
1026-
'":cuda-include",\n' + ' ":cudnn-include",'
963+
'":cuda-include",'
1027964
),
1028965
},
1029966
"cuda/BUILD",
@@ -1058,8 +995,7 @@ def _create_local_cuda_repository(repository_ctx):
1058995
repository_ctx,
1059996
cuda_config,
1060997
) +
1061-
"\n cxx_builtin_include_directory: \"%s\"" % cupti_header_dir +
1062-
"\n cxx_builtin_include_directory: \"%s\"" % cudnn_header_dir
998+
"\n cxx_builtin_include_directory: \"%s\"" % cupti_header_dir
1063999
)
10641000

10651001
# For gcc, do not canonicalize system header paths; some versions of gcc
@@ -1155,9 +1091,7 @@ cuda_configure = repository_rule(
11551091
"TF_CUDA_CLANG",
11561092
_TF_DOWNLOAD_CLANG,
11571093
_CUDA_TOOLKIT_PATH,
1158-
_CUDNN_INSTALL_PATH,
11591094
_TF_CUDA_VERSION,
1160-
_TF_CUDNN_VERSION,
11611095
_TF_CUDA_COMPUTE_CAPABILITIES,
11621096
"NVVMIR_LIBRARY_DIR",
11631097
_PYTHON_BIN_PATH,

0 commit comments

Comments
 (0)