electronstudio / raylib-python-cffi

Python CFFI bindings for Raylib
http://electronstudio.github.io/raylib-python-cffi
Eclipse Public License 2.0
152 stars 29 forks source link

upgrade to raylib 4.5 #102

Closed ogoudron closed 9 months ago

ogoudron commented 1 year ago

Hello, Do you plan to upgrade to raylib 4.5 ?

Thanks, Olivier.

electronstudio commented 1 year ago

Yes, but I don't know when. Why don't you try it with Raylib 4.5 now? It might work already.

electronstudio commented 1 year ago

seems to work but as usual raylib has made braindead API changes so examples and stuff wont work.

electronstudio commented 1 year ago

I've updated the code and some of the examples. Seems to work. Can't do a release to pypi because Github Actions isn't working.

electronstudio commented 1 year ago

OK done.

ogoudron commented 1 year ago

Thanks, Tested the quickstart example on macOS 11.7.6 X86_64, Python 3.11.3 and it works. Will test on Debian 11 X86_64 and ARM64 (RPI400) later today. Tested on macOS 13.3.1(a) mac mini M1, Python 3.11.3 and installation work but test program (the quickstart example) fail. The quickstart example failed yesterday with 4.2 too. Is it because of M1 cpu ?

ogoudron@Mac-M1 ~ % pip3 install raylib
Collecting raylib Downloading raylib-4.5.0.0.tar.gz (69 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.8/69.8 kB 1.3 MB/s eta 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Requirement already satisfied: cffi>=1.14.6 in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from raylib) (1.15.1) Requirement already satisfied: inflection in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from raylib) (0.5.1) Requirement already satisfied: pycparser in /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages (from cffi>=1.14.6->raylib) (2.21) Building wheels for collected packages: raylib Building wheel for raylib (pyproject.toml) ... done Created wheel for raylib: filename=raylib-4.5.0.0-cp311-cp311-macosx_10_9_universal2.whl size=70243 sha256=ddd1459efd8ee32a0e90aed7b6f24f767f0b641edf014c7daeaa27d7f8d3577e Stored in directory: /Users/ogoudron/Library/Caches/pip/wheels/aa/d5/ca/da18b3f0c355a34c4e7d003d709f748fa47b74f7e3de05b9db Successfully built raylib Installing collected packages: raylib Successfully installed raylib-4.5.0.0

ogoudron@Mac-M1 dev % python3 test.py Traceback (most recent call last): File "/Users/ogoudron/dev/test.py", line 1, in from pyray import * File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyray/init.py", line 15, in from raylib import rl, ffi File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/raylib/init.py", line 15, in from ._raylib_cffi import ffi, lib as rl ModuleNotFoundError: No module named 'raylib._raylib_cffi'

electronstudio commented 1 year ago

Sort of. GitHub Actions don't have Arm64 runners so I can't build binary packages for M1 Mac. (In the past I got it working by cross compiling on the x64 runner but that suddenly stopped working). So there's no binary wheels.

However it should still work by compiling from source and it should do that automatically when you try to install on M1 Mac. Do you have Raylib itself installed and working?

ogoudron commented 1 year ago

I have tested on Debian 11 X86_64 and Windows 10 X86_64 and it works. On Debian 11 ARM64 (RPI400) i have the exact same problem and error message than macOS M1. I am new to Python and i am not sure that i am right but when i read the command output from pip3 it seems that it has built raylib from source and installed it. I will be happy to do some tests on macOS M1 and RPI400 if you tell me what to do.

ogoudron commented 1 year ago

I have understood my mistake (confusing raylib-4.5.0.0 with the raylib library). I have followed "Have Pip build from source" on RPI400 and it's better. The quickstart sample start but fail with a GLFW error. I will recheck the way i install Raylib on RPI400 and tell you later. For now i will do the same test on my mac M1.

electronstudio commented 1 year ago

Yeah it's probably failing to build because you didn't have raylib installed. But it should show an error in that case during the build step, I don't know why it didn't.

electronstudio commented 1 year ago

It seems that if you do pip install setuptools before pip install raylib then it will print any errors in the build step. Not sure how to enforce this other than mention it in the docs. Adding it as a dependency doesn't work.

ogoudron commented 1 year ago

On macOS M1 i have the same error than before.

I have compiled and installed Raylib following your instructions in "Have Pip build from source". This is the end of the installation log (sudo make install) and it seems to be OK :

Install the project... -- Install configuration: "Release" -- Installing: /usr/local/lib/libraylib.a -- Up-to-date: /usr/local/include/raylib.h -- Up-to-date: /usr/local/include/rlgl.h -- Up-to-date: /usr/local/include/raymath.h -- Installing: /usr/local/lib/pkgconfig/raylib.pc -- Installing: /usr/local/lib/cmake/raylib/raylib-config-version.cmake -- Up-to-date: /usr/local/lib/cmake/raylib/raylib-config.cmake

Then the pip install part (following our instruction in "Have Pip build from source") :

ogoudron@Mac-M1 build % pip3 install --no-binary raylib --upgrade --force-reinstall raylib Collecting raylib Using cached raylib-4.5.0.0-cp311-cp311-macosx_10_9_universal2.whl Collecting cffi>=1.14.6 (from raylib) Using cached cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl (174 kB) Collecting inflection (from raylib) Using cached inflection-0.5.1-py2.py3-none-any.whl (9.5 kB) Collecting pycparser (from cffi>=1.14.6->raylib) Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB) Installing collected packages: pycparser, inflection, cffi, raylib Attempting uninstall: pycparser Found existing installation: pycparser 2.21 Uninstalling pycparser-2.21: Successfully uninstalled pycparser-2.21 Attempting uninstall: inflection Found existing installation: inflection 0.5.1 Uninstalling inflection-0.5.1: Successfully uninstalled inflection-0.5.1 Attempting uninstall: cffi Found existing installation: cffi 1.15.1 Uninstalling cffi-1.15.1: Successfully uninstalled cffi-1.15.1 Attempting uninstall: raylib Found existing installation: raylib 4.5.0.0 Uninstalling raylib-4.5.0.0: Successfully uninstalled raylib-4.5.0.0 Successfully installed cffi-1.15.1 inflection-0.5.1 pycparser-2.21 raylib-4.5.0.0)

And finally the error when running the QuickStart example :

ogoudron@Mac-M1 dev % python3 test.py Traceback (most recent call last): File "/Users/ogoudron/dev/test.py", line 1, in from pyray import * File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pyray/init.py", line 15, in from raylib import rl, ffi File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/raylib/init.py", line 15, in from ._raylib_cffi import ffi, lib as rl ModuleNotFoundError: No module named 'raylib._raylib_cffi'

I have no idea what is happening. I have tested that the Raylib is working compiling a test C program and it worked : I have copied "/usr/local/lib/libraylib.a" in a working folder and compiled a test program in C with this command "clang -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL libraylib.a test.c -o test" and the resulting program is compiling well and working.

electronstudio commented 1 year ago

I have compiled binary wheels for M1 macs using cirrus ci. They are attached in this zip file. Please install the appropriate one and let me know if it works. I'll put them on pypi if it does.
dist.zip

ogoudron commented 1 year ago

Can you tell me where ?

electronstudio commented 1 year ago

Download the file I posted above. Assuming you are on Macos 13 the the file you want is raylib-4.5.0.0-cp311-cp311-macosx_13_0_arm64.whl. So unzip that file, and then: python3.11 -m pip install raylib-4.5.0.0-cp311-cp311-macosx_13_0_arm64.whl

ogoudron commented 1 year ago

It works :-) Thanks for all.

ogoudron commented 1 year ago

Tell me when it will be done because i will test it on a fresh new Mac mini M2.

electronstudio commented 1 year ago

I have put them on pypi now.

ogoudron commented 1 year ago

It works on the first try on a fresh macOS M2. I will test on RPI400 later this week.

Thanks for your help again.

ogoudron commented 1 year ago

I have done some tests on RPI400 and theses are what i suppose to have understood :

1) Compiling Raylib with MAKE following Raylib documentation (make PLATFORM=PLATFORM_DESKTOP GRAPHICS=GRAPHICS_API_OPENGL_21) work with a C test program but fail when installing Python binding with pip command. It fail without error message when issuing pip command as a simple user and fail with asking to install Raylib with CMAKE when running the same command with sudo.

2) Compiling Raylib with CMAKE following your documentation (cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..) seemed to work but i have an error message with GLFW initialization when trying a C test program. The pip command fail too but i suppose that's because the Raylib installation is not working.

3) i tried to compile Raylib with mixing our CMAKE example and Raylib documented flags for RPI and it doesn't work. Maybe i am wrong with the way to pass flags to CMAKE. This is what i tried : "cmake -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release PLATFORM=PLATFORM_DESKTOP GRAPHICS=GRAPHICS_API_OPENGL_21 .." The resulting Raylib is unable to work with my C test program.

So, i suppose i am wrong with the way to force CMAKE to use "GRAPHICS_API_OPENGL_21". Or i am totally wrong :-)

electronstudio commented 1 year ago

raylib's cmake build is buggy and they've never cared about fixing it. i did fix it couple of times for them in the past but then they would break it again so i gave up. so it might be you're requesting the right thing and it's just not doing it.

electronstudio commented 1 year ago

try cmake -DPLATFORM="Desktop" -DOPENGL_VERSION="2.1" -DGRAPHICS="GRAPHICS_API_OPENGL_21" -DINCLUDE_EVERYTHING=on -DSUPPORT_FILEFORMAT_JPG=on -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..

electronstudio commented 1 year ago

could also try cmake -DPLATFORM="Desktop" -DOPENGL_VERSION="ES 2.0" -DGRAPHICS="GRAPHICS_API_OPENGL_ES2" -DINCLUDE_EVERYTHING=on -DSUPPORT_FILEFORMAT_JPG=on -DWITH_PIC=on -DCMAKE_BUILD_TYPE=Release ..

ogoudron commented 1 year ago

Following your advise, i was able to successfully compile Raylib with CMAKE and my test C program works now.

When i try to install the Python binding following your instructions in "Have Pip build from source" i have the same error than before (with macOS and RPI400).

pi@raspberrypi:~ $ pip3 install --no-binary raylib --upgrade --force-reinstall raylib Defaulting to user installation because normal site-packages is not writeable Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting raylib Using cached raylib-4.5.0.0-cp39-cp39-linux_aarch64.whl Collecting cffi>=1.14.6 (from raylib) Using cached cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (448 kB) Collecting inflection (from raylib) Using cached https://www.piwheels.org/simple/inflection/inflection-0.5.1-py2.py3-none-any.whl (9.5 kB) Collecting pycparser (from cffi>=1.14.6->raylib) Using cached https://www.piwheels.org/simple/pycparser/pycparser-2.21-py2.py3-none-any.whl (119 kB) Installing collected packages: pycparser, inflection, cffi, raylib Attempting uninstall: pycparser Found existing installation: pycparser 2.21 Uninstalling pycparser-2.21: Successfully uninstalled pycparser-2.21 Attempting uninstall: inflection Found existing installation: inflection 0.5.1 Uninstalling inflection-0.5.1: Successfully uninstalled inflection-0.5.1 Attempting uninstall: cffi Found existing installation: cffi 1.15.1 Uninstalling cffi-1.15.1: Successfully uninstalled cffi-1.15.1 Attempting uninstall: raylib Found existing installation: raylib 4.5.0.0 Uninstalling raylib-4.5.0.0: Successfully uninstalled raylib-4.5.0.0 Successfully installed cffi-1.15.1 inflection-0.5.1 pycparser-2.21 raylib-4.5.0.0 pi@raspberrypi:~ $ python3 test.py Traceback (most recent call last): File "/home/pi/test.py", line 1, in from pyray import * File "/home/pi/.local/lib/python3.9/site-packages/pyray/init.py", line 15, in from raylib import rl, ffi File "/home/pi/.local/lib/python3.9/site-packages/raylib/init.py", line 15, in from ._raylib_cffi import ffi, lib as rl ModuleNotFoundError: No module named 'raylib._raylib_cffi'

Trying the same command with sudo take more time (seems to do more things) but fail with the same error when trying to run the Python test program.

electronstudio commented 1 year ago

It's using a cached version of the wheel rather than creating a new one, try:

pip3 install setuptools
pip3 install --no-cache-dir --no-binary raylib --upgrade --force-reinstall raylib==4.5.0.0

That should either work, or give you an error saying why it doesn't work. If it doesn't work and doesn't say why then we'll have to do a manual build.

ogoudron commented 1 year ago

Thanks, it works. Maybe you could update this in your documentation (https://electronstudio.github.io/raylib-python-cffi/BUILDING.html)

electronstudio commented 1 year ago

will do. would be nice if we could build Pi wheels and put them on pypi.

ogoudron commented 1 year ago

I am just starting learning Python and i don't know how theses things works. Just tell how to build "wheels" and/or where to find the resulting files and i will send them to you.