PaddleClas icon indicating copy to clipboard operation
PaddleClas copied to clipboard

pip install fails due to old numpy version

Open Luux opened this issue 11 months ago • 7 comments

With python 3.12+, the installation via pip install paddleclas fails due to numpy:

Collecting numpy==1.24.4 (from paddleclas)
  Using cached numpy-1.24.4.tar.gz (10.9 MB)
  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
  ╰─> [32 lines of output]
      Traceback (most recent call last):
        File "/home/xxx/miniconda3/envs/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
          ~~~~^^
        File "/home/xxx/miniconda3/envs/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/xxx/miniconda3/envs/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 112, in get_requires_for_build_wheel
          backend = _build_backend()
        File "/home/xxx/miniconda3/envs/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
          obj = import_module(mod_path)
        File "/home/xxx/miniconda3/envs/3.13/lib/python3.13/importlib/__init__.py", line 88, 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 1026, in exec_module
        File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
        File "/tmp/pip-build-env-oxkroq4l/overlay/lib/python3.13/site-packages/setuptools/__init__.py", line 16, in <module>
          import setuptools.version
        File "/tmp/pip-build-env-oxkroq4l/overlay/lib/python3.13/site-packages/setuptools/version.py", line 1, in <module>
          import pkg_resources
        File "/tmp/pip-build-env-oxkroq4l/overlay/lib/python3.13/site-packages/pkg_resources/__init__.py", line 2172, in <module>
          register_finder(pkgutil.ImpImporter, find_on_path)
                          ^^^^^^^^^^^^^^^^^^^
      AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?
      [end of output]
  

Luux avatar Jan 10 '25 13:01 Luux

For python 3.13+, this PR pinned another version as a workaround: https://github.com/PaddlePaddle/PaddleClas/pull/3327

However, it's still broken for python 3.12.

Luux avatar Jan 10 '25 14:01 Luux

Hi, paddleclas has not been tested with Python 3.12+, and we are still discussing if the support should be added in the next release. Currently, we would recommend Python 3.8, 3.9, and 3.10, as the existing tests are based on these versions. For now, you can try installing paddleclas from source by locally removing the version specification of numpy from the dependency list. That may work, but since paddleclas isn't really tested with some new versions of numpy, the performance and stability is not guaranteed.

Bobholamovic avatar Jan 11 '25 09:01 Bobholamovic

today is 2025-2-4, and this issue is still not fixed. i searched and found that, is setuptools and python version question, or Compatibility issues between Python and numpy versions, or must rewirte paddleclas/setup.py file.

encorehu avatar Feb 04 '25 11:02 encorehu

Find 'register_finder(pkgutil.ImpImporter' in 'C:\Python312\Lib\site-packages\pip_vendor\pkg_resources_init_.py' Find 'register_finder(pkgutil.ImpImporter' in 'C:\Python312\Lib\site-packages\pkg_resources_init_.py'

after comment

#if hasattr(pkgutil, 'ImpImporter'):
#    register_finder(pkgutil.ImpImporter, find_on_path)

python3.12, use pip install PaddleClas, still get error:

File "C:\Users\apyuser\AppData\Local\Temp\pip-build-env-s4dbcivb\overlay\Lib\site-packages\pkg_resources\__init__.py", line 2172, in <module>
          register_finder(pkgutil.ImpImporter, find_on_path)
                          ^^^^^^^^^^^^^^^^^^^
      AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?

so, in pip install enviroment , the file is not use local site-packages\pkg_resources_init_.py, but use remote pypi file.

encorehu avatar Feb 04 '25 11:02 encorehu

python 3.12, Temporarily resolved installation issues

  1. Download the source code and remove the following "2.6.0" from folder name
  2. cmd enters the directory
  3. modify requirements.txt, change numpy==1.24.4 to numpy==1.26.4
  4. Execute "pip install ."
  5. run python, test import paddleclas

encorehu avatar Feb 04 '25 13:02 encorehu

python 3.12, Temporarily resolved installation issues

  1. Download the source code and remove the following "2.6.0" from folder name
  2. cmd enters the directory
  3. modify requirements.txt, change numpy==1.24.4 to numpy==1.26.4
  4. Execute "pip install ."
  5. run python, test import paddleclas

I tried this out, but it failed at first because I only commented out the "numpy==1.24.4; ..." line, since it already had "numpy==1.26.4; ..." line. Your (encorehc) answer is still correct though. I'm on Windows 11, in conda environment, python version 3.12.9.

git clone https://github.com/PaddlePaddle/PaddleClas.git
cd .\PaddleClas\
 # edited requirements.txt, commented out "numpy==1.24.4" line, already had "numpy==1.26.4" line
pip install .

It installed requirements successfully. I created a test_import_paddleclas.py file with only "import paddleclas" as the contents. python .\test_import_paddleclas.py RuntimeError: module compiled against ABI version 0x1000009 but this version of numpy is 0x2000000

I went back and edited the requirements.txt file because I'm using python version 3.12.9, not 3.13

# numpy==1.24.4; python_version<"3.13"
# numpy==1.26.4; python_version>="3.13"
numpy==1.26.4

It installed just fine and running my test script worked ok (with a warning about ccache): python .\test_import_paddleclas.py C:\Users\searo\miniconda3\envs\paddle_env_312\Lib\site-packages\paddle\utils\cpp_extension\extension_utils.py:711: UserWarning: No ccache found. Please be aware that recompiling all source files may be required. You can download and install ccache from: https://github.com/ccache/ccache/blob/master/doc/INSTALL.md warnings.warn(warning_message)

git9875 avatar May 12 '25 21:05 git9875

Thanks for sharing the solutions. This issue should have been fixed in the develop branch. Please pull the latest code to see if it works.

Bobholamovic avatar Jun 05 '25 13:06 Bobholamovic

The issue has no response for a long time and will be closed. You can reopen or new another issue if are still confused.


From Bot

TingquanGao avatar Jul 07 '25 03:07 TingquanGao