# PySDL2 FAQ

This is a list of Frequently Asked Questions about PySDL2. If there are any questions and answers you would like added here, please let us know on GitHub!

## On importing…

… my script fails and complains that a SDL2 library could not be found!

> Do you have the libraries properly installed? On most platforms, you can install them easily using `pip install pysdl2-dll`. On ARM64 macOS, you can install native SDL2 binaries using the Homebrew package manager. For BSD, Linux on exotic architectures (not x86 or ARM64), and other Unix-like platforms, install the SDL2 binaries using your system’s package manager. On all platforms, you can manually set the path of your SDL2 binaries using the `PYSDL2_DLL_PATH` environment variable.

… my script fails complaining that the found SDL2 library can’t be used!

> Do you use a 64-bit operating system? Please make sure that the Python interpreter and that the SDL2 libraries are either 64-bit ones or 32-bit ones. A 32-bit Python interpreter can’t deal with a 64-bit library and vice versa.

## Using…

… the sdl2 API is weird. Why do you use the SDL_ prefix all the time?

> PySDL2 offers 1-to-1 bindings for most of the SDL2 API, keeping the same function names and arguments as the original SDL2, SDL2_mixer, SDL2_ttf, SDL2_image, and SDL2_gfx libraries. This makes the package much easier to maintain, but also makes it easy to reference the SDL2 documentation and adapt C SDL2 examples into Python code. For a friendlier, more Pythonic wrapper around the SDL2 API, take a look at PySDL2’s `sdl2.ext` module.

… the sdl2 API does not comply to PEP-8. Please make it PEP-8 compatible.

> Most of the API is PEP-8 compatible. However, the low-level bindings to SDL2 and its addon libraries use the exact same function/structure/constant naming as their C counterparts, meaning that PySDL2 will necessarily diverge from PEP-8 in some places. The `sdl2.ext` module should theoretically be fully PEP-8 compliant.

## How do I…

… save my surfaces as image files?

> You can use `sdl2.ext.save_bmp()` to save them as bitmap files, or the low-level `sdl2.sdlimage.IMG_SavePNG()` function to save them to PNG on systems with SDL_image installed. For a wider range of formats, you can use the `surface_to_ndarray()` function to convert an SDL surface into a Numpy array, open the array with the Pillow library using `Image.from_array()`, and then save it to any export format supported by Pillow.

## Font handling…

… is too hard. Why can’t it work the same way as pygame does?

> The `sdl2.sdlttf` API does not know about platform-specific font locations and is unable to resolve font paths based on e.g. the font name or typeface. Additionally, it’s usually a bad idea for a projects to rely on system fonts that may not be available on every computer: finding a free-use font you like and bundling it with your project is almost always the better option.