ml-agentsの環境構築でのFailed building wheel for numpyエラーへの対処

# 環境
- Windows 11 version 22H2
- Anaconda 3
- Python 3.10.12（3.10.13以降ではエラーが発生したため）
- Unity 2022.3.5f1

# エラーの内容
ml-agentsのrelease-21のドキュメントの通りに環境構築していました。
https://github.com/Unity-Technologies/ml-agents/blob/release_21/docs/Installation.md

```terminal
python -m pip install ./ml-agents-envs
```
の部分で
```terminal
ERROR: Failed building wheel for numpy
Successfully built mlagents-envs
Failed to build numpy
ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects
```
で終わるエラーが発生しました。

<details><summary>エラー全文（長いです）</summary><div>

```text
(前略)
  Building wheel for numpy (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for numpy (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [287 lines of output]
      setup.py:63: RuntimeWarning: NumPy 1.21.2 may not yet support Python 3.10.
        warnings.warn(
      Running from numpy source directory.
      Processing numpy/random\_bounded_integers.pxd.in
      Processing numpy/random\bit_generator.pyx
      Processing numpy/random\mtrand.pyx
      Processing numpy/random\_bounded_integers.pyx.in
      Processing numpy/random\_common.pyx
      Processing numpy/random\_generator.pyx
      Processing numpy/random\_mt19937.pyx
      Processing numpy/random\_pcg64.pyx
      Processing numpy/random\_philox.pyx
      Processing numpy/random\_sfc64.pyx
      Cythonizing sources
      blas_opt_info:
      blas_mkl_info:
      No module named 'numpy.distutils._msvccompiler' in numpy.distutils; trying from distutils
      customize MSVCCompiler
        libraries mkl_rt not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      blis_info:
        libraries blis not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      openblas_info:
        libraries openblas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
      get_default_fcompiler: matching types: '['gnu', 'intelv', 'absoft', 'compaqv', 'intelev', 'gnu95', 'g95', 'intelvem', 'intelem', 'flang']'
      customize GnuFCompiler
      Could not locate executable g77
      Could not locate executable f77
      customize IntelVisualFCompiler
      Could not locate executable ifort
      Could not locate executable ifl
      customize AbsoftFCompiler
      Could not locate executable f90
      customize CompaqVisualFCompiler
      Could not locate executable DF
      customize IntelItaniumVisualFCompiler
      Could not locate executable efl
      customize Gnu95FCompiler
      Could not locate executable gfortran
      Could not locate executable f95
      customize G95FCompiler
      Could not locate executable g95
      customize IntelEM64VisualFCompiler
      customize IntelEM64TFCompiler
      Could not locate executable efort
      Could not locate executable efc
      customize PGroupFlangCompiler
      Could not locate executable flang
      don't know how to compile Fortran code on platform 'nt'
        NOT AVAILABLE

      accelerate_info:
        NOT AVAILABLE

      atlas_3_10_blas_threads_info:
      Setting PTATLAS=ATLAS
        libraries tatlas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      atlas_3_10_blas_info:
        libraries satlas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      atlas_blas_threads_info:
      Setting PTATLAS=ATLAS
        libraries ptf77blas,ptcblas,atlas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      atlas_blas_info:
        libraries f77blas,cblas,atlas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\system_info.py:2026: UserWarning:
          Optimized (vendor) Blas libraries are not found.
          Falls back to netlib Blas library which has worse performance.
          A better performance should be easily gained by switching
          Blas library.
        if self._calc_info(blas):
      blas_info:
        libraries blas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\system_info.py:2026: UserWarning:
          Blas (http://www.netlib.org/blas/) libraries not found.
          Directories to search for the libraries can be specified in the
          numpy/distutils/site.cfg file (section [blas]) or by setting
          the BLAS environment variable.
        if self._calc_info(blas):
      blas_src_info:
        NOT AVAILABLE

      C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\system_info.py:2026: UserWarning:
          Blas (http://www.netlib.org/blas/) sources not found.
          Directories to search for the sources can be specified in the
          numpy/distutils/site.cfg file (section [blas_src]) or by setting
          the BLAS_SRC environment variable.
        if self._calc_info(blas):
        NOT AVAILABLE

      non-existing path in 'numpy\\distutils': 'site.cfg'
      lapack_opt_info:
      lapack_mkl_info:
        libraries mkl_rt not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      openblas_lapack_info:
        libraries openblas not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      openblas_clapack_info:
        libraries openblas,lapack not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      flame_info:
        libraries flame not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      atlas_3_10_threads_info:
      Setting PTATLAS=ATLAS
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries tatlas,tatlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries lapack_atlas not found in C:\
        libraries tatlas,tatlas not found in C:\
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries tatlas,tatlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\Library\lib
        libraries tatlas,tatlas not found in C:\Users\PolyC\anaconda3\Library\lib
      <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
        NOT AVAILABLE

      atlas_3_10_info:
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries satlas,satlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries lapack_atlas not found in C:\
        libraries satlas,satlas not found in C:\
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries satlas,satlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\Library\lib
        libraries satlas,satlas not found in C:\Users\PolyC\anaconda3\Library\lib
      <class 'numpy.distutils.system_info.atlas_3_10_info'>
        NOT AVAILABLE

      atlas_threads_info:
      Setting PTATLAS=ATLAS
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries ptf77blas,ptcblas,atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries lapack_atlas not found in C:\
        libraries ptf77blas,ptcblas,atlas not found in C:\
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries ptf77blas,ptcblas,atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\Library\lib
        libraries ptf77blas,ptcblas,atlas not found in C:\Users\PolyC\anaconda3\Library\lib
      <class 'numpy.distutils.system_info.atlas_threads_info'>
        NOT AVAILABLE

      atlas_info:
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries f77blas,cblas,atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\lib
        libraries lapack_atlas not found in C:\
        libraries f77blas,cblas,atlas not found in C:\
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries f77blas,cblas,atlas not found in C:\Users\PolyC\anaconda3\envs\mlagents\libs
        libraries lapack_atlas not found in C:\Users\PolyC\anaconda3\Library\lib
        libraries f77blas,cblas,atlas not found in C:\Users\PolyC\anaconda3\Library\lib
      <class 'numpy.distutils.system_info.atlas_info'>
        NOT AVAILABLE

      lapack_info:
        libraries lapack not found in ['C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\lib', 'C:\\', 'C:\\Users\\PolyC\\anaconda3\\envs\\mlagents\\libs', 'C:\\Users\\PolyC\\anaconda3\\Library\\lib']
        NOT AVAILABLE

      C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\system_info.py:1858: UserWarning:
          Lapack (http://www.netlib.org/lapack/) libraries not found.
          Directories to search for the libraries can be specified in the
          numpy/distutils/site.cfg file (section [lapack]) or by setting
          the LAPACK environment variable.
        return getattr(self, '_calc_info_{}'.format(name))()
      lapack_src_info:
        NOT AVAILABLE

      C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\system_info.py:1858: UserWarning:
          Lapack (http://www.netlib.org/lapack/) sources not found.
          Directories to search for the sources can be specified in the
          numpy/distutils/site.cfg file (section [lapack_src]) or by setting
          the LAPACK_SRC environment variable.
        return getattr(self, '_calc_info_{}'.format(name))()
        NOT AVAILABLE

      numpy_linalg_lapack_lite:
        FOUND:
          language = c
          define_macros = [('HAVE_BLAS_ILP64', None), ('BLAS_SYMBOL_SUFFIX', '64_')]

      Warning: attempted relative import with no known parent package
      C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\dist.py:275: UserWarning: Unknown distribution option: 'define_macros'
        warnings.warn(msg)
      running bdist_wheel
      running build
      running config_cc
      unifing config_cc, config, build_clib, build_ext, build commands --compiler options
      running config_fc
      unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
      running build_src
      build_src
      building py_modules sources
      creating build
      creating build\src.win-amd64-3.10
      creating build\src.win-amd64-3.10\numpy
      creating build\src.win-amd64-3.10\numpy\distutils
      building library "npymath" sources
      Traceback (most recent call last):
        File "C:\Users\PolyC\anaconda3\envs\mlagents\lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
          main()
        File "C:\Users\PolyC\anaconda3\envs\mlagents\lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "C:\Users\PolyC\anaconda3\envs\mlagents\lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\build_meta.py", line 211, in build_wheel
          return self._build_with_temp_dir(['bdist_wheel'], '.whl',
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\build_meta.py", line 197, in _build_with_temp_dir
          self.run_setup()
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\build_meta.py", line 248, in run_setup
          super(_BuildMetaLegacyBackend,
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\build_meta.py", line 142, in run_setup
          exec(compile(code, __file__, 'exec'), locals())
        File "setup.py", line 448, in <module>
          setup_package()
        File "setup.py", line 440, in setup_package
          setup(**metadata)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\core.py", line 169, in setup
          return old_setup(**new_attr)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\__init__.py", line 165, in setup
          return distutils.core.setup(**attrs)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\core.py", line 148, in setup
          dist.run_commands()
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 967, in run_commands
          self.run_command(cmd)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 986, in run_command
          cmd_obj.run()
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\wheel\bdist_wheel.py", line 299, in run
          self.run_command('build')
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\cmd.py", line 313, in run_command
          self.distribution.run_command(command)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 986, in run_command
          cmd_obj.run()
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\build.py", line 61, in run
          old_build.run(self)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\command\build.py", line 135, in run
          self.run_command(cmd_name)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\cmd.py", line 313, in run_command
          self.distribution.run_command(command)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\dist.py", line 986, in run_command
          cmd_obj.run()
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\build_src.py", line 144, in run
          self.build_sources()
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\build_src.py", line 155, in build_sources
          self.build_library_sources(*libname_info)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\build_src.py", line 288, in build_library_sources
          sources = self.generate_sources(sources, (lib_name, build_info))
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\build_src.py", line 378, in generate_sources
          source = func(extension, build_dir)
        File "numpy\core\setup.py", line 661, in get_mathlib_info
          st = config_cmd.try_link('int main(void) { return 0;}')
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\command\config.py", line 243, in try_link
          self._link(body, headers, include_dirs,
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\config.py", line 163, in _link
          return self._wrap_method(old_config._link, lang,
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\config.py", line 98, in _wrap_method
          ret = mth(*((self,)+args))
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\command\config.py", line 137, in _link
          (src, obj) = self._compile(body, headers, include_dirs, lang)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\config.py", line 106, in _compile
          src, obj = self._wrap_method(old_config._compile, lang,
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\command\config.py", line 98, in _wrap_method
          ret = mth(*((self,)+args))
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\command\config.py", line 132, in _compile
          self.compiler.compile([src], include_dirs=include_dirs)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\_msvccompiler.py", line 401, in compile
          self.spawn(args)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-build-env-c_fdefig\overlay\Lib\site-packages\setuptools\_distutils\_msvccompiler.py", line 505, in spawn
          return super().spawn(cmd, env=env)
        File "C:\Users\PolyC\AppData\Local\Temp\pip-install-v9k3zxxp\numpy_3a391657d4094fcebb86331414c9774b\numpy\distutils\ccompiler.py", line 88, in <lambda>
          m = lambda self, *args, **kw: func(self, *args, **kw)
      TypeError: CCompiler_spawn() got an unexpected keyword argument 'env'
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for numpy
Successfully built mlagents-envs
Failed to build numpy
ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects
```
</div></details>

エラーの冒頭で`NumPy 1.21.2 may not yet support Python 3.10.`と書かれている通りっぽいですが
ml-agentsのrelease-21はPython 3.10.12以降が要件なのでどうしようもない

# 解決
githubのissueを検索したところ、developブランチで修正されているという記述が散見されたので、
release-21ではなくdevelopから同じことを行うとうまくいきました。

# 参考文献
- [@moko_programerさんの記事](https://qiita.com/moko_programer/items/3f3a7f7cd9190c5b5e2f)：何もわからなかったので相当助かりました。

# 終わり
初めての記事なので不備があったら申し訳ないです。