matplotlib / mplcairo

A (new) cairo backend for Matplotlib.
MIT License
106 stars 22 forks source link

ImportError: cannot import name '_mplcairo' from partially initialized module 'mplcairo' #49

Closed AgilentGCMS closed 1 year ago

AgilentGCMS commented 1 year ago

I recently installed mplcairo 0.5 on MacOS with pip install mplcairo. However, when I try to import it, I get:

In [1]: import mplcairo
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
Cell In[1], line 1
----> 1 import mplcairo

File ~/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mplcairo/__init__.py:27
     23     _load_symbols()
     25 import matplotlib as mpl
---> 27 from . import _mplcairo
     28 from ._mplcairo import antialias_t, operator_t, get_options, set_options
     30 __all__ = [
     31     "antialias_t", "operator_t",
     32     "get_options", "set_options",
     33     "get_raw_buffer",
     34 ]

ImportError: cannot import name '_mplcairo' from partially initialized module 'mplcairo' (most likely due to a circular import) (/Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mplcairo/__init__.py)

I am using python 3.11.5.

anntzer commented 1 year ago

What are the contents of ~/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mplcairo/? Any relevant output if you uninstall mplcairo and reinstall it with pip install -v mplcairo?

AgilentGCMS commented 1 year ago
$ ls -l ~/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mplcairo/
total 64
-rw-r--r--  1 sbasu1 staff  3234 2023 Sep 13 09:18:58 __init__.py
drwxr-xr-x 14 sbasu1 staff   448 2023 Sep 13 09:18:58 __pycache__
-rw-r--r--  1 sbasu1 staff   664 2023 Sep 13 09:18:58 _backports.py
-rw-r--r--  1 sbasu1 staff  2422 2023 Sep 13 09:18:58 _util.py
-rw-r--r--  1 sbasu1 staff   155 2023 Sep 13 09:18:58 _version.py
-rw-r--r--  1 sbasu1 staff 17664 2023 Sep 13 09:18:58 base.py
-rw-r--r--  1 sbasu1 staff  1373 2023 Sep 13 09:18:58 gtk.py
-rw-r--r--  1 sbasu1 staff  1486 2023 Sep 13 09:18:58 gtk_native.py
-rw-r--r--  1 sbasu1 staff   605 2023 Sep 13 09:18:58 macosx.py
-rw-r--r--  1 sbasu1 staff  2131 2023 Sep 13 09:18:58 multipage.py
-rw-r--r--  1 sbasu1 staff  2219 2023 Sep 13 09:18:58 qt.py
-rw-r--r--  1 sbasu1 staff   815 2023 Sep 13 09:18:58 tk.py
-rw-r--r--  1 sbasu1 staff  1385 2023 Sep 13 09:18:58 wx.py
$ pip install -v mplcairo
Using pip 23.2.1 from /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pip (python 3.11)
Collecting mplcairo
  Using cached mplcairo-0.5-cp311-cp311-macosx_13_0_x86_64.whl
Requirement already satisfied: matplotlib>=2.2 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from mplcairo) (3.7.2)
Requirement already satisfied: pillow in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from mplcairo) (9.5.0)
Requirement already satisfied: pycairo>=1.16.0 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from mplcairo) (1.23.0)
Requirement already satisfied: contourpy>=1.0.1 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (1.0.7)
Requirement already satisfied: cycler>=0.10 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (4.42.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (1.4.5)
Requirement already satisfied: numpy>=1.20 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (1.25.2)
Requirement already satisfied: packaging>=20.0 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (23.1)
Requirement already satisfied: pyparsing>=2.3.1 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (3.1.1)
Requirement already satisfied: python-dateutil>=2.7 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from matplotlib>=2.2->mplcairo) (2.8.2)
Requirement already satisfied: six>=1.5 in /Users/sbasu1/packages/macports/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib>=2.2->mplcairo) (1.16.0)
Installing collected packages: mplcairo
Successfully installed mplcairo-0.5
anntzer commented 1 year ago

Ugh, clearly something went wrong with the compilation. Try again uninstalling and pip install --no-cache-dir -v mplcairo (to force a recompilation)? Although now I do suspect that this is a fallout from https://github.com/pypa/wheel/issues/566 and I'll basically need to make a new release (which is unlikely to happen in the coming days, at least); in that case the most likely to work for you is to just install from git HEAD (where the above issue with wheel has been fixed): pip install -v git+https://github.com/anntzer/mplcairo.

AgilentGCMS commented 1 year ago

The first suggestion, pip install --no-cache-dir -v mplcairo, did not solve the problem. However, pulling from the git head with pip install -v git+https://github.com/anntzer/mplcairo solved it. Thanks!

AgilentGCMS commented 10 months ago

FYI, this bug is still there. I just installed mplcairo on a new computer, and import failed with this error. The fix, as described here, worked.

DT-one commented 1 month ago

For me your installation solution fails at Running command Getting requirements to build wheel with a ModuleNotFoundError: No module named 'cairo'

Not sure if there is something subtle I am missing, but I can import cairo in a script

anntzer commented 1 month ago

Is there no traceback at all?

DT-one commented 1 month ago

Why don't I dump the whole output

(base) C:\Users\xxxxx>pip install -v git+https://github.com/matplotlib/mplcairo
Using pip 24.0 from C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\Lib\site-packages\pip (python 3.12)
WARNING: Ignoring invalid distribution ~plcairo (C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\Lib\site-packages)
Collecting git+https://github.com/matplotlib/mplcairo
  Cloning https://github.com/matplotlib/mplcairo to c:\users\xxxxx\appdata\local\temp\pip-req-build-3123kxct
  Running command git version
  git version 2.36.1.windows.1
  Running command git clone --filter=blob:none https://github.com/matplotlib/mplcairo 'C:\Users\xxxxx\AppData\Local\Temp\pip-req-build-3123kxct'
  Cloning into 'C:\Users\xxxxx\AppData\Local\Temp\pip-req-build-3123kxct'...
  Updating files:   3% (2/60)
  Updating files:   5% (3/60)
  Updating files:   6% (4/60)
  Updating files:   8% (5/60)
  Updating files:  10% (6/60)
  Updating files:  11% (7/60)
  Updating files:  13% (8/60)
  Updating files:  15% (9/60)
  Updating files:  16% (10/60)
  Updating files:  18% (11/60)
  Updating files:  20% (12/60)
  Updating files:  21% (13/60)
  Updating files:  23% (14/60)
  Updating files:  25% (15/60)
  Updating files:  26% (16/60)
  Updating files:  28% (17/60)
  Updating files:  30% (18/60)
  Updating files:  31% (19/60)
  Updating files:  33% (20/60)
  Updating files:  35% (21/60)
  Updating files:  36% (22/60)
  Updating files:  38% (23/60)
  Updating files:  40% (24/60)
  Updating files:  41% (25/60)
  Updating files:  43% (26/60)
  Updating files:  45% (27/60)
  Updating files:  46% (28/60)
  Updating files:  48% (29/60)
  Updating files:  50% (30/60)
  Updating files:  51% (31/60)
  Updating files:  53% (32/60)
  Updating files:  55% (33/60)
  Updating files:  56% (34/60)
  Updating files:  58% (35/60)
  Updating files:  60% (36/60)
  Updating files:  61% (37/60)
  Updating files:  63% (38/60)
  Updating files:  65% (39/60)
  Updating files:  66% (40/60)
  Updating files:  68% (41/60)
  Updating files:  70% (42/60)
  Updating files:  71% (43/60)
  Updating files:  73% (44/60)
  Updating files:  75% (45/60)
  Updating files:  76% (46/60)
  Updating files:  78% (47/60)
  Updating files:  80% (48/60)
  Updating files:  81% (49/60)
  Updating files:  83% (50/60)
  Updating files:  85% (51/60)
  Updating files:  86% (52/60)
  Updating files:  88% (53/60)
  Updating files:  90% (54/60)
  Updating files:  91% (55/60)
  Updating files:  93% (56/60)
  Updating files:  95% (57/60)
  Updating files:  96% (58/60)
  Updating files:  98% (59/60)
  Updating files: 100% (60/60)
  Updating files: 100% (60/60), done.
  Running command git rev-parse HEAD
  0ef09b2992259d721e6ecab6096971d2569e540d
  Resolved https://github.com/matplotlib/mplcairo to commit 0ef09b2992259d721e6ecab6096971d2569e540d
  Running command git rev-parse HEAD
  0ef09b2992259d721e6ecab6096971d2569e540d
  Running command pip subprocess to install build dependencies
  Ignoring pycairo: markers 'os_name == "posix"' don't match your environment
  Collecting setuptools>=62
  Collecting setuptools_scm>=6.2 (from setuptools_scm[toml]>=6.2)
  Collecting pybind11>=2.8.0
  Collecting packaging>=20 (from setuptools_scm>=6.2->setuptools_scm[toml]>=6.2)
  WARNING: Ignoring invalid distribution ~plcairo (C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\Lib\site-packages)
  Installing collected packages: setuptools, pybind11, packaging, setuptools_scm
  ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
  qtconsole 5.5.1 requires qtpy>=2.4.0, but you have qtpy 2.3.1 which is incompatible.
  streamlit 1.32.0 requires packaging<24,>=16.8, but you have packaging 24.1 which is incompatible.
  Successfully installed packaging-24.1 pybind11-2.13.5 setuptools-74.1.1 setuptools_scm-8.1.0
  Installing build dependencies ... done
  Running command Getting requirements to build wheel
  Traceback (most recent call last):
    File "C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
      main()
    File "C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\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\xxxxx\DevopsSetupPrograms\Anaconda\Lib\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:\Users\xxxxx\AppData\Local\Temp\pip-build-env-by9ggc49\overlay\Lib\site-packages\setuptools\build_meta.py", line 332, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=[])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\xxxxx\AppData\Local\Temp\pip-build-env-by9ggc49\overlay\Lib\site-packages\setuptools\build_meta.py", line 302, in _get_build_requires
      self.run_setup()
    File "C:\Users\xxxxx\AppData\Local\Temp\pip-build-env-by9ggc49\overlay\Lib\site-packages\setuptools\build_meta.py", line 318, in run_setup
      exec(code, locals())
    File "<string>", line 37, in <module>
  ModuleNotFoundError: No module named 'cairo'
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
  full command: 'C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\python.exe' 'C:\Users\xxxxx\DevopsSetupPrograms\Anaconda\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py' get_requires_for_build_wheel 'C:\Users\xxxxx\AppData\Local\Temp\tmp2tts6ay3'
  cwd: C:\Users\xxxxx\AppData\Local\Temp\pip-req-build-3123kxct
  Getting requirements to build wheel ... error
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

(base) C:\Users\xxxxx>
anntzer commented 1 month ago

On Windows this will indeed not work: see the instructions at https://github.com/matplotlib/mplcairo?tab=readme-ov-file#windows instead.