chaquo / chaquopy

Chaquopy: the Python SDK for Android
https://chaquo.com/chaquopy/
MIT License
749 stars 128 forks source link

Update to scikit-image 0.19 or later #1042

Open mhsmith opened 6 months ago

mhsmith commented 6 months ago

We're currently on version 0.18. Versions 0.19 and later require Pythran, which fails like this:

File "setup.py", line 218, in <module>
    setup(
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/requirements/numpy/distutils/core.py", line 169, in setup
    return old_setup(**new_attr)
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/setuptools/__init__.py", line 153, in setup
    return distutils.core.setup(**attrs)
  File "/home/smith/.pyenv/versions/3.9.12/lib/python3.9/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/home/smith/.pyenv/versions/3.9.12/lib/python3.9/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/home/smith/.pyenv/versions/3.9.12/lib/python3.9/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/requirements/numpy/distutils/command/egg_info.py", line 24, in run
    self.run_command("build_src")
  File "/home/smith/.pyenv/versions/3.9.12/lib/python3.9/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/home/smith/.pyenv/versions/3.9.12/lib/python3.9/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/requirements/numpy/distutils/command/build_src.py", line 144, in run
    self.build_sources()
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/requirements/numpy/distutils/command/build_src.py", line 161, in build_sources
    self.build_extension_sources(ext)
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/requirements/numpy/distutils/command/build_src.py", line 306, in build_extension_sources
    sources = list(ext.sources)
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/pythran/dist.py", line 160, in sources
    import pythran.toolchain as tc
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/pythran/toolchain.py", line 6, in <module>
    from pythran.backend import Cxx, Python
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/pythran/backend.py", line 7, in <module>
    from pythran.analyses import LocalNodeDeclarations, GlobalDeclarations, Scope
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/pythran/analyses/__init__.py", line 12, in <module>
    from .aliases import Aliases, StrictAliases
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/pythran/analyses/aliases.py", line 6, in <module>
    from pythran.tables import functions, methods, MODULES
  File "/home/smith/git/chaquo/chaquopy/server/pypi/packages/scikit-image/build/0.19.3/cp39-cp39-android_21_arm64_v8a/env/lib/python3.9/site-packages/pythran/tables.py", line 152, in <module>
    inspect.getfullargspec(numpy.asarray)
AttributeError: module 'numpy' has no attribute 'asarray'

This is because the Android build of NumPy is earlier on the PYTHONPATH, and it doesn't provide anything at build-time except get_include. I don't know whether Pythran would still work if it imported a Linux x86_64 version of NumPy, or whether its output is platform-dependent.

Versions 0.20 and later require Meson, like NumPy and SciPy (#1041). However, I understand some work has been done in the Meson-based version of NumPy to make it more cross-compilation-friendly, so this may make it easier to solve the Pythran issue as well.

mhsmith commented 6 months ago

If anyone else needs a newer version of scikit-image, please click the thumbs up button above, and post a comment explaining why you need it.