python-cffi / cffi

A Foreign Function Interface package for calling C libraries from Python.
https://cffi.readthedocs.io/en/latest/
Other
114 stars 41 forks source link

Unable to install CFFI 1.16 on MSYS2 MINGW64 using pip (24.1) and python (3.11.9) #90

Closed chxmberland closed 1 month ago

chxmberland commented 3 months ago

Description

I am currently attempting to install CFFI on my Windows machine running MSYS2 MINGW64 using the terminal command pip install cffi.

System and Versions

OS: Windows 11, MSYS2 MINGW64 Python: 3.11.9 Pip: 24.1 CFFI: 1.16, 1.15.1, 1.15 (versions with which I could reproduce this error)

However, I get the following error:

Collecting cffi
  Using cached cffi-1.16.0.tar.gz (512 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [27 lines of output]
      Traceback (most recent call last):
        File "C:/msys64/mingw64/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "C:/msys64/mingw64/lib/python3.11/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:/msys64/mingw64/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 327, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=[])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 297, in _get_build_requires
          self.run_setup()
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 313, in run_setup
          exec(code, locals())
        File "<string>", line 126, in <module>
        File "<string>", line 105, in uses_msvc
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/config.py", line 220, in try_compile
          self._compile(body, headers, include_dirs, lang)
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/config.py", line 132, in _compile
          self.compiler.compile([src], include_dirs=include_dirs)
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/_distutils/_msvccompiler.py", line 343, in compile
          self.initialize()
        File "C:/msys64/tmp/pip-build-env-hyndckce/overlay/lib/python3.11/site-packages/setuptools/_distutils/_msvccompiler.py", line 246, in initialize
          raise DistutilsPlatformError(
      distutils.errors.DistutilsPlatformError: --plat-name must be one of ('win32', 'win-amd64', 'win-arm32', 'win-arm64')

Discussion from #21 did not seem to yield similar results to those in that thread. For example, running pip install --no-build-isolation cffi does not make any difference. Additionally, I get the same error running both pip install cffi==1.15.1 and pip install cffi==1.15.

Furthermore, solutions to similar issues in this Stack Overflow thread did not seem to work either. Specifically, using SETUPTOOLS_USE_DISTUTILS=stdlib.

Any help or insights would be greatly appreciated!

chxmberland commented 3 months ago

I made some progress here, when I run export SETUPTOOLS_USE_DISTUTILS=stdlib and then python3 -m pip install cffi, I get the following outputs.

<string>:69: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead
_configtest.c:2:2: error: #error "not MSVC"
    2 | #error "not MSVC"
      |  ^~~~~
Note: will not use '__thread' in the C code
***** The above error message can be safely ignored.

I believe that this error is ignored thanks to the export SETUPTOOLS_USE_DISTUTILS=stdlib. However, this is followed by...

building '_cffi_backend' extension
      creating build/temp.mingw_x86_64-3.11
      creating build/temp.mingw_x86_64-3.11/src
      creating build/temp.mingw_x86_64-3.11/src/c
      gcc -DNDEBUG -g -fwrapv -O3 -Wall -march=nocona -msahf -mtune=generic -O2 -pipe -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong -O3 -march=nocona -msahf -mtune=generic -O2 -pipe -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector-strong -O3 -DFFI_BUILDING=1 -IC:/msys64/mingw64/include/python3.11 -c src/c/_cffi_backend.c -o build/temp.mingw_x86_64-3.11/src/c/_cffi_backend.o
      src/c/_cffi_backend.c: In function 'b_do_dlopen':
      src/c/_cffi_backend.c:4521:40: error: passing argument 1 of 'PyUnicode_AsWideChar' from incompatible pointer type [-Wincompatible-pointer-types]
       4521 |             sz1 = PyUnicode_AsWideChar((PyUnicodeObject *)filename_unicode,
            |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            |                                        |
            |                                        PyUnicodeObject *
      In file included from C:/msys64/mingw64/include/python3.11/Python.h:51,
                       from src/c/_cffi_backend.c:2:
      C:/msys64/mingw64/include/python3.11/unicodeobject.h:299:15: note: expected 'PyObject *' {aka 'struct _object *'} but argument is of type 'PyUnicodeObject *'
        299 |     PyObject *unicode,          /* Unicode object */
            |     ~~~~~~~~~~^~~~~~~
      error: command 'C:\\msys64\\mingw64\\bin/gcc.exe' failed with exit code 1
chxmberland commented 3 months ago

A colleague helped me to solve the issue. Initially, this issue was a result of trying to install the cryptography library. Since cffi is a dependency, its subsequent installation was failing.

It looks like MSYS2 has a specific Python cryptography package that can be installed for this situation as pacman -Sy --needed mingw-w64-x86_64-python3-cryptography.

After I installed this package, the cryptography package worked fine. However, I'll leave this issue open for now as I don't think the issue wasn't directly resolved with cffi. I

arigo commented 3 months ago

Thanks for the report, this looks like a superficial error easily fixed (see PR #91).

cclauss commented 2 months ago

Can this issue be closed or is there a remaining TODO?

nitzmahone commented 1 month ago

Yep, closing as completed since it's merged- the change will likely be included in 1.17.1