open-atmos / PySDM

Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
https://open-atmos.github.io/PySDM/
GNU General Public License v3.0
57 stars 34 forks source link

Development install not compatible with Python 3.12 #1401

Open edejong-caltech opened 3 weeks ago

edejong-caltech commented 3 weeks ago

Error message when executing pip install -e pysdm:

Installing build dependencies ... done
  Checking if build backend supports build_editable ... error
  error: subprocess-exited-with-error

  × Checking if build backend supports build_editable did not run successfully.
  │ exit code: 1
  ╰─> [33 lines of output]
      Traceback (most recent call last):
        File "/opt/anaconda3/envs/learning/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/opt/anaconda3/envs/learning/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/opt/anaconda3/envs/learning/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 100, in _supported_features
          backend = _build_backend()
                    ^^^^^^^^^^^^^^^^
        File "/opt/anaconda3/envs/learning/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
          obj = import_module(mod_path)
                ^^^^^^^^^^^^^^^^^^^^^^^
        File "/opt/anaconda3/envs/learning/lib/python3.12/importlib/__init__.py", line 90, in import_module
          return _bootstrap._gcd_import(name[level:], package, level)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
        File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
        File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
        File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
        File "<frozen importlib._bootstrap_external>", line 995, in exec_module
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "/private/var/folders/p0/4_dx18lx2hg2t2d47ltv2r8m00223t/T/pip-build-env-o26dgx53/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 16, in <module>
          import setuptools.version
        File "/private/var/folders/p0/4_dx18lx2hg2t2d47ltv2r8m00223t/T/pip-build-env-o26dgx53/overlay/lib/python3.12/site-packages/setuptools/version.py", line 1, in <module>
          import pkg_resources
        File "/private/var/folders/p0/4_dx18lx2hg2t2d47ltv2r8m00223t/T/pip-build-env-o26dgx53/overlay/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2158, in <module>
          register_finder(pkgutil.ImpImporter, find_on_path)
                          ^^^^^^^^^^^^^^^^^^^
      AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
      [end of output]

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

× Checking if build backend supports build_editable did not run successfully.
│ exit code: 1
╰─> See above for output. 

Seems related to updates in v3.12 that remove features of importlib: https://docs.python.org/3/whatsnew/3.12.html#importlib. Consider restricting installation to 3.11 in setup.py? (Applies to examples as well).

edejong-caltech commented 3 weeks ago

Note that downgrading python version to 3.11 was effective in fixing the issue for me.

slayoo commented 3 weeks ago

thanks @edejong-caltech For the record, on CI, we have the following workaround for Python 3.12: https://github.com/open-atmos/PySDM/blob/main/.github/workflows/tests%2Bartifacts%2Bpypi.yml#L330-L331

slayoo commented 1 day ago

fix coming soon: #1402 (the problem was that an older version of setuptools that we version-pinned in PySDM uses features which were removed in Python 3.12)