ccxt: Is there new installation problem with Python 3.12?

Operating System

Win 11

Programming Languages

Python

CCXT Version

No response

Description

I tried a fresh install of ccxt on Python 3.12 version. However, I couldn’t install it. There are some problems with other Python packages. Is there anyone who can install ccxt on Python 3.12?

Code

  

About this issue

  • Original URL
  • State: open
  • Created 9 months ago
  • Comments: 15 (3 by maintainers)

Most upvoted comments

Until a stable version of aiohttp is released , you can get it working with pip install aiohttp==3.9.0b0. CCXT works fine with Pyhton 3.12 for me like this.

I tried only install aiohttp. Could’nt it. Yes you finded main reason. Thank you. I wil follow aiohttp updates. When i can install aiohttp and ccxt over python 3.12 i will write under this session.

@kubilaykilinc, interesting I got an error as well, but a different one (related to aiohttp)

Using cached async_timeout-4.0.3-py3-none-any.whl (5.7 kB)
Downloading cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl (177 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 177.2/177.2 kB 5.7 MB/s eta 0:00:00
Downloading charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl (116 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 116.8/116.8 kB 5.5 MB/s eta 0:00:00
Downloading pycares-4.4.0-cp312-cp312-macosx_10_9_universal2.whl (136 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 136.9/136.9 kB 7.9 MB/s eta 0:00:00
Downloading urllib3-2.0.6-py3-none-any.whl (123 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.8/123.8 kB 5.4 MB/s eta 0:00:00
Building wheels for collected packages: aiohttp, yarl, frozenlist, multidict
  Building wheel for aiohttp (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for aiohttp (pyproject.toml) did not run successfully.
  │ exit code: 1

Hi,

I used this line for installation : pip install -U --user ccxt

Full installation process and error messages


Collecting ccxt Obtaining dependency information for ccxt from https://files.pythonhosted.org/packages/e5/9d/dc4f0386a0bd071cca26980a049aaa4af582bb7a67ec96339f5f6c3827d7/ccxt-4.1.13-py2.py3-none-any.whl.metadata Using cached ccxt-4.1.13-py2.py3-none-any.whl.metadata (109 kB) Requirement already satisfied: setuptools>=60.9.0 in c:\users\kubilay\appdata\roaming\python\python312\site-packages (from ccxt) (68.2.2) Collecting certifi>=2018.1.18 (from ccxt) Obtaining dependency information for certifi>=2018.1.18 from https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl.metadata Using cached certifi-2023.7.22-py3-none-any.whl.metadata (2.2 kB) Collecting requests>=2.18.4 (from ccxt) Obtaining dependency information for requests>=2.18.4 from https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl.metadata Using cached requests-2.31.0-py3-none-any.whl.metadata (4.6 kB) Collecting cryptography>=2.6.1 (from ccxt) Obtaining dependency information for cryptography>=2.6.1 from https://files.pythonhosted.org/packages/d7/78/29d8332bebfe3c2d49a63fb23e1c9fc73a13507b5206b98479fda04c993b/cryptography-41.0.4-cp37-abi3-win_amd64.whl.metadata Using cached cryptography-41.0.4-cp37-abi3-win_amd64.whl.metadata (5.3 kB) Collecting aiohttp>=3.8 (from ccxt) Using cached aiohttp-3.8.6.tar.gz (7.4 MB) Installing build dependencies … done Getting requirements to build wheel … done Installing backend dependencies … done Preparing metadata (pyproject.toml) … done Collecting aiodns>=1.1.1 (from ccxt) Obtaining dependency information for aiodns>=1.1.1 from https://files.pythonhosted.org/packages/1a/74/976abff30200cb0cab0bd076db074b8cdda9236ba885ebe3f4d91c7e074b/aiodns-3.1.1-py3-none-any.whl.metadata Downloading aiodns-3.1.1-py3-none-any.whl.metadata (4.0 kB) Collecting yarl>=1.7.2 (from ccxt) Using cached yarl-1.9.2.tar.gz (184 kB) Installing build dependencies … done Getting requirements to build wheel … done Preparing metadata (pyproject.toml) … done Collecting pycares>=4.0.0 (from aiodns>=1.1.1->ccxt) Obtaining dependency information for pycares>=4.0.0 from https://files.pythonhosted.org/packages/d3/72/e6af5a0670eb0b5beadef95479387af22b0ed7088e180677be04bf076476/pycares-4.4.0-cp312-cp312-win_amd64.whl.metadata Using cached pycares-4.4.0-cp312-cp312-win_amd64.whl.metadata (4.5 kB) Collecting attrs>=17.3.0 (from aiohttp>=3.8->ccxt) Using cached attrs-23.1.0-py3-none-any.whl (61 kB) Collecting charset-normalizer<4.0,>=2.0 (from aiohttp>=3.8->ccxt) Obtaining dependency information for charset-normalizer<4.0,>=2.0 from https://files.pythonhosted.org/packages/d1/47/148eae656ac376938afc97ed288893c6089038180c9e0782e5423ac0307d/charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl.metadata Using cached charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl.metadata (33 kB) Collecting multidict<7.0,>=4.5 (from aiohttp>=3.8->ccxt) Using cached multidict-6.0.4.tar.gz (51 kB) Installing build dependencies … done Getting requirements to build wheel … done Installing backend dependencies … done Preparing metadata (pyproject.toml) … done Collecting async-timeout<5.0,>=4.0.0a3 (from aiohttp>=3.8->ccxt) Obtaining dependency information for async-timeout<5.0,>=4.0.0a3 from https://files.pythonhosted.org/packages/a7/fa/e01228c2938de91d47b307831c62ab9e4001e747789d0b05baf779a6488c/async_timeout-4.0.3-py3-none-any.whl.metadata Using cached async_timeout-4.0.3-py3-none-any.whl.metadata (4.2 kB) Collecting frozenlist>=1.1.1 (from aiohttp>=3.8->ccxt) Using cached frozenlist-1.4.0.tar.gz (90 kB) Installing build dependencies … done Getting requirements to build wheel … done Preparing metadata (pyproject.toml) … done Collecting aiosignal>=1.1.2 (from aiohttp>=3.8->ccxt) Using cached aiosignal-1.3.1-py3-none-any.whl (7.6 kB) Collecting cffi>=1.12 (from cryptography>=2.6.1->ccxt) Obtaining dependency information for cffi>=1.12 from https://files.pythonhosted.org/packages/e9/63/e285470a4880a4f36edabe4810057bd4b562c6ddcc165eacf9c3c7210b40/cffi-1.16.0-cp312-cp312-win_amd64.whl.metadata Using cached cffi-1.16.0-cp312-cp312-win_amd64.whl.metadata (1.5 kB) Collecting idna<4,>=2.5 (from requests>=2.18.4->ccxt) Using cached idna-3.4-py3-none-any.whl (61 kB) Collecting urllib3<3,>=1.21.1 (from requests>=2.18.4->ccxt) Obtaining dependency information for urllib3<3,>=1.21.1 from https://files.pythonhosted.org/packages/26/40/9957270221b6d3e9a3b92fdfba80dd5c9661ff45a664b47edd5d00f707f5/urllib3-2.0.6-py3-none-any.whl.metadata Using cached urllib3-2.0.6-py3-none-any.whl.metadata (6.6 kB) Collecting pycparser (from cffi>=1.12->cryptography>=2.6.1->ccxt) Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB) Using cached ccxt-4.1.13-py2.py3-none-any.whl (3.9 MB) Downloading aiodns-3.1.1-py3-none-any.whl (5.4 kB) Using cached certifi-2023.7.22-py3-none-any.whl (158 kB) Using cached cryptography-41.0.4-cp37-abi3-win_amd64.whl (2.7 MB) Using cached requests-2.31.0-py3-none-any.whl (62 kB) Using cached async_timeout-4.0.3-py3-none-any.whl (5.7 kB) Using cached cffi-1.16.0-cp312-cp312-win_amd64.whl (181 kB) Using cached charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl (98 kB) Using cached pycares-4.4.0-cp312-cp312-win_amd64.whl (76 kB) Using cached urllib3-2.0.6-py3-none-any.whl (123 kB) Building wheels for collected packages: aiohttp, yarl, frozenlist, multidict Building wheel for aiohttp (pyproject.toml) … error error: subprocess-exited-with-error

× Building wheel for aiohttp (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [94 lines of output] ********************* * Accelerated build * ********************* running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-cpython-312 creating build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\abc.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\base_protocol.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\client.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\client_exceptions.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\client_proto.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\client_reqrep.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\client_ws.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\connector.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\cookiejar.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\formdata.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\hdrs.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\helpers.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\http.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\http_exceptions.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\http_parser.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\http_websocket.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\http_writer.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\locks.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\log.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\multipart.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\payload.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\payload_streamer.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\pytest_plugin.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\resolver.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\streams.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\tcp_helpers.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\test_utils.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\tracing.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\typedefs.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_app.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_exceptions.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_fileresponse.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_log.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_middlewares.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_protocol.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_request.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_response.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_routedef.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_runner.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_server.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_urldispatcher.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\web_ws.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\worker.py -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_init_.py -> build\lib.win-amd64-cpython-312\aiohttp running egg_info writing aiohttp.egg-info\PKG-INFO writing dependency_links to aiohttp.egg-info\dependency_links.txt writing requirements to aiohttp.egg-info\requires.txt writing top-level names to aiohttp.egg-info\top_level.txt reading manifest file ‘aiohttp.egg-info\SOURCES.txt’ reading manifest template ‘MANIFEST.in’ warning: no files found matching ‘aiohttp’ anywhere in distribution warning: no previously-included files matching ‘.pyc’ found anywhere in distribution warning: no previously-included files matching '.pyd’ found anywhere in distribution warning: no previously-included files matching ‘.so’ found anywhere in distribution warning: no previously-included files matching '.lib’ found anywhere in distribution warning: no previously-included files matching ‘.dll’ found anywhere in distribution warning: no previously-included files matching '.a’ found anywhere in distribution warning: no previously-included files matching ‘*.obj’ found anywhere in distribution warning: no previously-included files found matching ‘aiohttp*.html’ no previously-included directories found matching ‘docs_build’ adding license file ‘LICENSE.txt’ writing manifest file ‘aiohttp.egg-info\SOURCES.txt’ copying aiohttp_cparser.pxd -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_find_header.pxd -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_headers.pxi -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_helpers.pyi -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_helpers.pyx -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_http_parser.pyx -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_http_writer.pyx -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp_websocket.pyx -> build\lib.win-amd64-cpython-312\aiohttp copying aiohttp\py.typed -> build\lib.win-amd64-cpython-312\aiohttp creating build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_cparser.pxd.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_find_header.pxd.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_helpers.pyi.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_helpers.pyx.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_http_parser.pyx.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_http_writer.pyx.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash_websocket.pyx.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash copying aiohttp.hash\hdrs.py.hash -> build\lib.win-amd64-cpython-312\aiohttp.hash running build_ext building ‘aiohttp._websocket’ extension error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/ [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for aiohttp Building wheel for yarl (pyproject.toml) … error error: subprocess-exited-with-error

× Building wheel for yarl (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [49 lines of output] E:\Temp\WinTemp\pip-build-env-pqu9hzq2\overlay\Lib\site-packages\setuptools\config\setupcfg.py:293: _DeprecatedConfig: Deprecated config in setup.cfg !!

          ********************************************************************************
          The license_file parameter is deprecated, use license_files instead.

          By 2023-Oct-30, you need to update your project and remove deprecated calls
          or your builds will no longer be supported.

          See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details.
          ********************************************************************************

  !!
    parsed = self.parsers.get(option_name, lambda x: x)(value)
  **********************
  * Accelerated build *
  **********************
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build\lib.win-amd64-cpython-312
  creating build\lib.win-amd64-cpython-312\yarl
  copying yarl\_quoting.py -> build\lib.win-amd64-cpython-312\yarl
  copying yarl\_quoting_py.py -> build\lib.win-amd64-cpython-312\yarl
  copying yarl\_url.py -> build\lib.win-amd64-cpython-312\yarl
  copying yarl\__init__.py -> build\lib.win-amd64-cpython-312\yarl
  running egg_info
  writing yarl.egg-info\PKG-INFO
  writing dependency_links to yarl.egg-info\dependency_links.txt
  writing requirements to yarl.egg-info\requires.txt
  writing top-level names to yarl.egg-info\top_level.txt
  reading manifest file 'yarl.egg-info\SOURCES.txt'
  reading manifest template 'MANIFEST.in'
  warning: no previously-included files matching '*.pyc' found anywhere in distribution
  warning: no previously-included files matching '*.cache' found anywhere in distribution
  warning: no previously-included files found matching 'yarl\*.html'
  warning: no previously-included files found matching 'yarl\*.so'
  warning: no previously-included files found matching 'yarl\*.pyd'
  no previously-included directories found matching 'docs\_build'
  adding license file 'LICENSE'
  writing manifest file 'yarl.egg-info\SOURCES.txt'
  copying yarl\__init__.pyi -> build\lib.win-amd64-cpython-312\yarl
  copying yarl\_quoting_c.pyi -> build\lib.win-amd64-cpython-312\yarl
  copying yarl\_quoting_c.pyx -> build\lib.win-amd64-cpython-312\yarl
  copying yarl\py.typed -> build\lib.win-amd64-cpython-312\yarl
  running build_ext
  building 'yarl._quoting_c' extension
  error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
  [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for yarl Building wheel for frozenlist (pyproject.toml) … error error: subprocess-exited-with-error

× Building wheel for frozenlist (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [33 lines of output] ********************* * Accelerated build * ********************* running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-cpython-312 creating build\lib.win-amd64-cpython-312\frozenlist copying frozenlist_init_.py -> build\lib.win-amd64-cpython-312\frozenlist running egg_info writing frozenlist.egg-info\PKG-INFO writing dependency_links to frozenlist.egg-info\dependency_links.txt writing top-level names to frozenlist.egg-info\top_level.txt reading manifest file ‘frozenlist.egg-info\SOURCES.txt’ reading manifest template ‘MANIFEST.in’ warning: no previously-included files matching ‘.pyc’ found anywhere in distribution warning: no previously-included files matching '.pyd’ found anywhere in distribution warning: no previously-included files matching ‘.so’ found anywhere in distribution warning: no previously-included files matching '.lib’ found anywhere in distribution warning: no previously-included files matching ‘.dll’ found anywhere in distribution warning: no previously-included files matching '.a’ found anywhere in distribution warning: no previously-included files matching ‘*.obj’ found anywhere in distribution warning: no previously-included files found matching ‘frozenlist*.html’ no previously-included directories found matching ‘docs_build’ adding license file ‘LICENSE’ writing manifest file ‘frozenlist.egg-info\SOURCES.txt’ copying frozenlist_init_.pyi -> build\lib.win-amd64-cpython-312\frozenlist copying frozenlist_frozenlist.pyx -> build\lib.win-amd64-cpython-312\frozenlist copying frozenlist\py.typed -> build\lib.win-amd64-cpython-312\frozenlist running build_ext building ‘frozenlist._frozenlist’ extension error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/ [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for frozenlist Building wheel for multidict (pyproject.toml) … error error: subprocess-exited-with-error

× Building wheel for multidict (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [74 lines of output] ********************* * Accelerated build * ********************* running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-cpython-312 creating build\lib.win-amd64-cpython-312\multidict copying multidict_abc.py -> build\lib.win-amd64-cpython-312\multidict copying multidict_compat.py -> build\lib.win-amd64-cpython-312\multidict copying multidict_multidict_base.py -> build\lib.win-amd64-cpython-312\multidict copying multidict_multidict_py.py -> build\lib.win-amd64-cpython-312\multidict copying multidict_init_.py -> build\lib.win-amd64-cpython-312\multidict running egg_info writing multidict.egg-info\PKG-INFO writing dependency_links to multidict.egg-info\dependency_links.txt writing top-level names to multidict.egg-info\top_level.txt reading manifest file ‘multidict.egg-info\SOURCES.txt’ reading manifest template ‘MANIFEST.in’ warning: no previously-included files matching ‘*.pyc’ found anywhere in distribution warning: no previously-included files found matching ‘multidict_multidict.html’ warning: no previously-included files found matching ‘multidict*.so’ warning: no previously-included files found matching ‘multidict*.pyd’ warning: no previously-included files found matching ‘multidict*.pyd’ no previously-included directories found matching ‘docs_build’ adding license file ‘LICENSE’ writing manifest file ‘multidict.egg-info\SOURCES.txt’ E:\Temp\WinTemp\pip-build-env-rq_s8icf\overlay\Lib\site-packages\setuptools\command\build_py.py:204: _Warning: Package ‘multidict._multilib’ is absent from the packages configuration. !!

          ********************************************************************************
          ############################
          # Package would be ignored #
          ############################
          Python recognizes 'multidict._multilib' as an importable package[^1],
          but it is absent from setuptools' `packages` configuration.

          This leads to an ambiguous overall configuration. If you want to distribute this
          package, please make sure that 'multidict._multilib' is explicitly added
          to the `packages` configuration field.

          Alternatively, you can also rely on setuptools' discovery methods
          (for example by using `find_namespace_packages(...)`/`find_namespace:`
          instead of `find_packages(...)`/`find:`).

          You can read more about "package discovery" on setuptools documentation page:

          - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html

          If you don't want 'multidict._multilib' to be distributed and are
          already explicitly excluding 'multidict._multilib' via
          `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`,
          you can try to use `exclude_package_data`, or `include-package-data=False` in
          combination with a more fine grained `package-data` configuration.

          You can read more about "package data files" on setuptools documentation page:

          - https://setuptools.pypa.io/en/latest/userguide/datafiles.html


          [^1]: For Python, any directory (with suitable naming) can be imported,
                even if it does not contain any `.py` files.
                On the other hand, currently there is no concept of package data
                directory, all directories are treated like packages.
          ********************************************************************************

  !!
    check.warn(importable)
  copying multidict\__init__.pyi -> build\lib.win-amd64-cpython-312\multidict
  copying multidict\py.typed -> build\lib.win-amd64-cpython-312\multidict
  running build_ext
  building 'multidict._multidict' extension
  error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
  [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for multidict Failed to build aiohttp yarl frozenlist multidict ERROR: Could not build wheels for aiohttp, yarl, frozenlist, multidict, which is required to install pyproject.toml-based projects