wjakob / nanobind

nanobind: tiny and efficient C++/Python bindings
BSD 3-Clause "New" or "Revised" License
2.14k stars 161 forks source link

[BUG]: error "nanobind requires a newer PyPy version (>= 7.3.10)" #512

Closed petrasvestartas closed 2 months ago

petrasvestartas commented 2 months ago

Problem description

I am using python 3.9.10. I cannot use any later version. The whole software I am using is this python version dependent... and I do not want to go back using pybind11 (which is awesome but nanobind is awesomer)

I did this that compiled nanobind:

conda create -n my_env python==3.8.16 pypy=7.3.11
pip install -e .

But wouldn it break the compatibility with C API?

The nanobind examples requires 7.3.10 PyPy version, but the 3.9.10 python can only install 7.3.8 version. Because of this I get error: 133 | # error "nanobind requires a newer PyPy version (>= 7.3.10)"

Reproducible example code

Default nanobind example with conda environment with python 3.9.10

I tried changing this

#if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x07030800 // 0x07030a00

but then I get this:


5/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp.o
      FAILED: CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp.o
      /usr/bin/c++ -DNB_COMPACT_ASSERTIONS -I/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/ext/robin_map/include -I/home/petras/anaconda3/envs/tvf/include/pypy3.9 -I/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/include -O3 -DNDEBUG -fPIC -fvisibility=hidden -ffunction-sections -fdata-sections -fno-strict-aliasing -MD -MT CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp.o -MF CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp.o.d -o CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp.o -c /home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp
      /home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp: In function ‘PyObject* nanobind::detail::obj_vectorcall(PyObject*, PyObject* const*, size_t, PyObject*, bool)’:
      /home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/common.cpp:314:26: error: ‘PyObject_VectorcallMethod’ was not declared in this scope; did you mean ‘PyObject_VectorcallDict’?
        314 |     res = (method_call ? PyObject_VectorcallMethod
            |                          ^~~~~~~~~~~~~~~~~~~~~~~~~
            |                          PyObject_VectorcallDict
      [6/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/error.cpp.o
      [7/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/trampoline.cpp.o
      [8/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/nb_ndarray.cpp.o
      [9/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/nb_internals.cpp.o
      [10/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/nb_func.cpp.o
      [11/13] Building CXX object CMakeFiles/nanobind-static.dir/home/petras/anaconda3/envs/tvf/lib/pypy3.9/site-packages/nanobind/src/nb_type.cpp.o
      ninja: build stopped: subcommand failed.

      *** CMake build failed
wjakob commented 2 months ago

Please don't open issue tracker tickets for things that aren't bugs with nanobind, this is why there is a discussion forum.

Regarding your questions: Older versions of PyPy segfault when used with nanobind. This check warns you about API incompatibility and (if you were to fix the API issues) undefined behavior. There is no solution to your request, you will either need to give up PyPy, change the Python version requirement, or switch back to pybind11.

petrasvestartas commented 2 months ago

Thank you for answer, I will keep my questions in discussions.

For now I see there is no solution for my questions.