Pyxel - A retro game engine for Python

Overview

[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский ]

Pyxel is a retro game engine for Python.

Thanks to its simple specifications inspired by retro gaming consoles, such as only 16 colors can be displayed and only 4 sounds can be played back at the same time, you can feel free to enjoy making pixel art style games.

The specifications of Pyxel are referring to awesome PICO-8 and TIC-80.

Pyxel is open source and free to use. Let's start making a retro game with Pyxel!

Specifications

  • Run on Windows, Mac, and Linux
  • Programming with Python
  • 16 color palette
  • 256x256 sized 3 image banks
  • 256x256 sized 8 tilemaps
  • 4 channels with 64 definable sounds
  • 8 musics which can combine arbitrary sounds
  • Keyboard, mouse, and gamepad inputs
  • Image and sound editor

Color Palette

How to Install

There are two types of Pyxel, a packaged version and a standalone version.

Install Packaged Version

The packaged version of Pyxel uses Pyxel as a Python extension module.

Recommended for those who are familiar with managing Python packages using the pip command or who want to develop full-fledged Python applications.

Windows

After installing Python3 (version 3.7 or higher), run the following command:

pip install -U pyxel

Mac

After installing Python3 (version 3.7 or higher), run the following command:

pip3 install -U pyxel

Linux

After installing the SDL2 package (libsdl2-dev for Ubuntu), Python3 (version 3.7 or higher), and python3-pip, run the following command:

sudo pip3 install -U pyxel

If the above doesn't work, try self-building by following the steps below after installing cmake and rust:

git clone https://github.com/kitao/pyxel.git
cd pyxel
make clean all
sudo pip3 install .

Install Standalone Version

The standalone version of Pyxel uses Pyxel as a standalone tool that does not depend on Python.

Recommended for those who want to start programming easily without worrying about Python settings, or those who want to play Pyxel games immediately.

Windows

Download and run the latest version of the Windows installer (pyxel-[version]-windows-setup.exe) from the Download Page.

Mac

After installing Homebrew, run the following commands:

brew tap kitao/pyxel
brew install pyxel

Linux

After installing the SDL2 package (libsdl2-dev for Ubuntu) and installing Homebrew, run the following commands:

brew tap kitao/pyxel
brew install pyxel

If the above doesn't work, try self-building the packaged version.

Try Pyxel Examples

After installing Pyxel, the examples of Pyxel will be copied to the current directory with the following command:

pyxel copy_examples

The examples to be copied are as follows:

An examples can be executed with the following commands:

cd pyxel_examples
pyxel run 01_hello_pyxel.py

How to Use

Create Pyxel Application

After importing the Pyxel module in your python script, specify the window size with init function first, then starts the Pyxel application with run function.

import pyxel

pyxel.init(160, 120)

def update():
    if pyxel.btnp(pyxel.KEY_Q):
        pyxel.quit()

def draw():
    pyxel.cls(0)
    pyxel.rect(10, 10, 20, 20, 11)

pyxel.run(update, draw)

The arguments of run function are update function to update each frame and draw function to draw screen when necessary.

In an actual application, it is recommended to wrap pyxel code in a class as below:

import pyxel

class App:
    def __init__(self):
        pyxel.init(160, 120)
        self.x = 0
        pyxel.run(self.update, self.draw)

    def update(self):
        self.x = (self.x + 1) % pyxel.width

    def draw(self):
        pyxel.cls(0)
        pyxel.rect(self.x, 0, 8, 8, 9)

App()

It is also possible to write simple code using show function and flip function to draw simple graphics and animations.

show function displays the screen and waits until the Esc key is pressed.

import pyxel

pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()

flip function updates the screen once.

import pyxel

pyxel.init(120, 80)

while True:
    pyxel.cls(3)
    pyxel.rectb(pyxel.frame_count % 160 - 40, 20, 40, 40, 7)
    pyxel.flip()

Run Pyxel Application

The created Python script can be executed with the following command:

pyxel run PYTHON_SCRIPT_FILE

For the packaged version, it can be executed like a normal Python script:

cd pyxel_examples
python3 PYTHON_SCRIPT_FILE

(For Windows, type python instead of python3)

Special Controls

The following special controls can be performed while a Pyxel application is running:

  • Esc
    Quit the application
  • Alt(Option)+1
    Save the screenshot to the desktop
  • Alt(Option)+2
    Reset the recording start time of the screen capture video
  • Alt(Option)+3
    Save the screen capture video to the desktop (up to 10 seconds)
  • Alt(Option)+0
    Toggle the performance monitor (fps, update time, and draw time)
  • Alt(Option)+Enter
    Toggle full screen

How to Create Resource

Pyxel Editor can create images and sounds used in a Pyxel application.

It starts with the following command:

pyxel edit [PYXEL_RESOURCE_FILE]

If the specified Pyxel resource file (.pyxres) exists, the file is loaded, and if it does not exist, a new file is created with the specified name. If the resource file is omitted, the name is my_resource.pyxres.

After starting Pyxel Editor, the file can be switched by dragging and dropping another resource file. If the resource file is dragged and dropped while holding down Ctrl(Cmd) key, only the resource type (Image/Tilemap/Sound/Music) that is currently being edited will be loaded. This operation enables to combine multiple resource files into one.

The created resource file can be loaded with load function.

Pyxel Editor has the following edit modes.

Image Editor:

The mode to edit the image banks.

By dragging and dropping an image file (png/gif/jpeg) onto the Image Editor screen, the image can be loaded into the currently selected image bank.

Tilemap Editor:

The mode to edit tilemaps in which images of the image banks are arranged in a tile pattern.

Sound Editor:

The mode to edit sounds.

Music Editor:

The mode to edit musics in which the sounds are arranged in order of playback.

Other Resource Creation Methods

Pyxel images and tilemaps can also be created by the following methods:

  • Create an image from a list of strings with Image.set function or Tilemap.set function
  • Load an image file (png/gif/jpeg) in Pyxel palette with Image.load function

Pyxel sounds can also be created in the following method:

  • Create a sound from strings with Sound.set function or Music.set function

Please refer to the API reference for usage of these functions.

How to Distribute Application

Pyxel supports a dedicated application distribution file format (Pyxel application file) that works across platforms.

Create the Pyxel application file (.pyxapp) with the following command:

pyxel package APP_ROOT_DIR STARTUP_SCRIPT_FILE

If the application should include resources or additional modules, place them in the application folder.

The created application file can be executed with the following command:

pyxel play PYXEL_APP_FILE

API Reference

System

  • width, height
    The width and height of the screen

  • frame_count
    The number of the elapsed frames

  • init(width, height, [title], [fps], [quit_key], [capture_scale], [capture_sec])
    Initialize the Pyxel application with screen size (width, height). The following can be specified as options: the window title with title, the frame rate with fps, the key to quit the application with quit_key, the scale of the screen capture with capture_scale, and the maximum recording time of the screen capture video with capture_sec.
    e.g. pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)

  • run(update, draw)
    Start the Pyxel application and call update function for frame update and draw function for drawing.

  • show()
    Show the screen and wait until the Esc key is pressed. (Do not use in normal applications)

  • flip()
    Updates the screen once. (Do not use in normal applications)

  • quit()
    Quit the Pyxel application.

Resource

  • load(filename, [image], [tilemap], [sound], [music])
    Load the resource file (.pyxres). If False is specified for the resource type (image/tilemap/sound/music), the resource will not be loaded.

Input

  • mouse_x, mouse_y
    The current position of the mouse cursor

  • mouse_wheel
    The current value of the mouse wheel

  • btn(key)
    Return True if key is pressed, otherwise return False. (Key definition list)

  • btnp(key, [hold], [period])
    Return True if key is pressed at that frame, otherwise return False. When hold and period are specified, True will be returned at the period frame interval when the key is held down for more than hold frames.

  • btnr(key)
    Return True if key is released at that frame, otherwise return False.

  • mouse(visible)
    If visible is True, show the mouse cursor. If False, hide it. Even if the mouse cursor is not displayed, its position is updated.

Graphics

  • colors
    List of the palette display colors. The display color is specified by a 24-bit numerical value. Use colors.from_list and colors.to_list to directly assign and retrieve Python lists.
    e.g. org_colors = pyxel.colors.to_list(); pyxel.colors[15] = 0x112233; pyxel.colors.from_list(org_colors)

  • image(img)
    Operate the image bank img (0-2). (See the Image class)
    e.g. pyxel.image(0).load(0, 0, "title.png")

  • tilemap(tm)
    Operate the tilemap tm (0-7). (See the Tilemap class)

  • clip(x, y, w, h)
    Set the drawing area of the screen from (x, y) to width w and height h. Reset the drawing area to full screen with clip().

  • camera(x, y)
    Change the upper left corner coordinates of the screen to (x, y). Reset the upper left corner coordinates to (0, 0) with camera().

  • pal(col1, col2)
    Replace color col1 with col2 at drawing. pal() to reset to the initial palette.

  • cls(col)
    Clear screen with color col.

  • pget(x, y)
    Get the color of the pixel at (x, y).

  • pset(x, y, col)
    Draw a pixel of color col at (x, y).

  • line(x1, y1, x2, y2, col)
    Draw a line of color col from (x1, y1) to (x2, y2).

  • rect(x, y, w, h, col)
    Draw a rectangle of width w, height h and color col from (x, y).

  • rectb(x, y, w, h, col)
    Draw the outline of a rectangle of width w, height h and color col from (x, y).

  • circ(x, y, r, col)
    Draw a circle of radius r and color col at (x, y).

  • circb(x, y, r, col)
    Draw the outline of a circle of radius r and color col at (x, y).

  • tri(x1, y1, x2, y2, x3, y3, col)
    Draw a triangle with vertices (x1, y1), (x2, y2), (x3, y3) and color col.

  • trib(x1, y1, x2, y2, x3, y3, col)
    Draw the outline of a triangle with vertices (x1, y1), (x2, y2), (x3, y3) and color col.

  • blt(x, y, img, u, v, w, h, [colkey])
    Copy the region of size (w, h) from (u, v) of the image bank img (0-2) to (x, y). If negative value is set for w and/or h, it will reverse horizontally and/or vertically. If colkey is specified, treated as transparent color.

  • bltm(x, y, tm, u, v, w, h, [colkey])
    Copy the region of size (w, h) from (u, v) of the tilemap tm (0-7) to (x, y). If negative value is set for w and/or h, it will reverse horizontally and/or vertically. If colkey is specified, treated as transparent color. The size of a tile is 8x8 pixels and is stored in a tilemap as a tuple of (tile_x, tile_y).

  • text(x, y, s, col)
    Draw a string s of color col at (x, y).

Audio

  • sound(snd)
    Operate the sound snd (0-63). (See the Sound class)
    e.g. pyxel.sound(0).speed = 60

  • music(msc)
    Operate the music msc (0-7). (See the Music class)

  • play_pos(ch)
    Get the sound playback position of channel ch (0-3) as a tuple of (sound no, note no). Returns None when playback is stopped.

  • play(ch, snd, loop=False)
    Play the sound snd (0-63) on channel ch (0-3). If snd is a list, it will be played in order. If True is specified for loop, loop playback is performed.

  • playm(msc, loop=False)
    Play the music msc (0-7). If True is specified for loop, loop playback is performed.

  • stop([ch])
    Stops playback of the specified channel ch (0-3). stop() to stop playing all channels.

Image Class

  • width, height
    The width and height of the image

  • set(x, y, data)
    Set the image at (x, y) by a list of strings.
    e.g. pyxel.image(0).set(10, 10, ["0123", "4567", "89ab", "cdef"])

  • load(x, y, filename)
    Load the image file (png/gif/jpeg) at (x, y).

  • pget(x, y)
    Get the pixel color at (x, y).

  • pset(x, y, col)
    Draw a pixel of color col at (x, y).

Tilemap Class

  • width, height
    The width and height of the tilemap

  • refimg
    The image bank (0-2) referenced by the tilemap

  • set(x, y, data)
    Set the tilemap at (x, y) by a list of strings.
    e.g. pyxel.tilemap(0).set(0, 0, ["000102", "202122", "a0a1a2", "b0b1b2"])

  • pget(x, y)
    Get the tile at (x, y). A tile is a tuple of (tile_x, tile_y).

  • pset(x, y, tile)
    Draw a tile at (x, y). A tile is a tuple of (tile_x, tile_y).

Sound Class

  • notes
    List of notes (0-127). The higher the number, the higher the pitch, and at 33 it becomes 'A2'(440Hz). The rest is -1.

  • tones
    List of tones (0:Triangle / 1:Square / 2:Pulse / 3:Noise)

  • volumes
    List of volumes (0-7)

  • effects
    List of effects (0:None / 1:Slide / 2:Vibrato / 3:FadeOut)

  • speed
    Playback speed. 1 is the fastest, and the larger the number, the slower the playback speed. At 120, the length of one note becomes 1 second.

  • set(notes, tones, volumes, effects, speed)
    Set notes, tones, volumes, and effects with a string. If the tones, volumes, and effects length are shorter than the notes, it is repeated from the beginning.

  • set_notes(notes)
    Set the notes with a string made of 'CDEFGAB'+'#-'+'0123' or 'R'. Case-insensitive and whitespace is ignored.
    e.g. pyxel.sound(0).set_note("G2B-2D3R RF3F3F3")

  • set_tones(tones)
    Set the tones with a string made of 'TSPN'. Case-insensitive and whitespace is ignored.
    e.g. pyxel.sound(0).set_tone("TTSS PPPN")

  • set_volumes(volumes)
    Set the volumes with a string made of '01234567'. Case-insensitive and whitespace is ignored.
    e.g. pyxel.sound(0).set_volume("7777 7531")

  • set_effects(effects)
    Set the effects with a string made of 'NSVF'. Case-insensitive and whitespace is ignored.
    e.g. pyxel.sound(0).set_effect("NFNF NVVS")

Music Class

  • sequences
    Two-dimensional list of sounds (0-63) listed by the number of channels

  • set(seq0, seq1, seq2, seq3)
    Set the lists of sound (0-63) of all channels. If an empty list is specified, that channel is not used for playback.
    e.g. pyxel.music(0).set([0, 1], [2, 3], [4], [])

Advanced APIs

Pyxel has "advanced APIs" that are not mentioned in this reference because they "may confuse users" or "need specialized knowledge to use".

If you are familiar with your skills, try to create amazing works with this as a clue!

How to Contribute

Submitting Issue

Use the Issue Tracker to submit bug reports and feature/enhancement requests. Before submitting a new issue, ensure that there is no similar open issue.

Manual Testing

Anyone manually testing the code and reporting bugs or suggestions for enhancements in the Issue Tracker are very welcome!

Submitting Pull Request

Patches/fixes are accepted in form of pull requests (PRs). Make sure the issue the pull request addresses is open in the Issue Tracker.

Submitted pull request is deemed to have agreed to publish under MIT License.

Other Information

License

Pyxel is under MIT License. It can be reused within proprietary software, provided that all copies of the software or its substantial portions include a copy of the terms of the MIT License and also a copyright notice.

Comments
  • Any tips on compiling Pyxel's Rust codebase into web assembly?

    Any tips on compiling Pyxel's Rust codebase into web assembly?

    I don't have much experience with compiling Rust projects but I have learnt about Pyodide it allows running Python code in your browser & powers sites like Iodide.

    Pyodide is Python compiled into Web Assembly (a fast, low-level language that runs in the browser). With Pyodide a user can edit & run Python (with pip installed modules) in their browser instantly.

    I tried this with Pyxel but Emscripten (the platform for web assembly) isn't supported.

    By compiling Pyxel's Rust library info web assembly, Pyxel games would be runnable & editable all in the browser!

    I think that could create an awesome site for people to make & share games, (like PICO-8 but with the much more powerful Python language & live editing the game's code in the browser).


    My question is... does anyone have some tips for adding Emscripten support?

    I've done a bit of work on converting pyxel to a Pyodide package (tutorial) but I'm still learning the basics of Rust builds.

    enhancement help wanted 
    opened by Fraser-Greenlee 75
  • Add supported platforms to the build workflow for GitHub Actions

    Add supported platforms to the build workflow for GitHub Actions

    For Pyxel 1.8.0, I've updated the build.yml to build Python wheels for each platform automatically: https://github.com/kitao/pyxel/blob/main/.github/workflows/build.yml

    But for now it only supports x86_64 Windows, x86_64 Linux, aarch64 Mac and x86_64 Mac.

    I would like to support other platforms such as i686 Windows and aarch64 Linux, but that would require cross-compiling for Rust-SDL2 (references SDL2) and PyO3 (references Python) and I haven't been able to do that yet.

    I look forward to any information or advice on how to do that.

    help wanted 
    opened by kitao 64
  • Please tell me your work with Pyxel (Part1)

    Please tell me your work with Pyxel (Part1)

    Hi Pyxel users,

    I would like to create a page that introduces Pyxel user examples like this. So could you tell me your work with Pyxel by replying this issue?

    The information I want is below:

    • Your work's title
    • URL of the work only for those who want to publish
    • Your name
    • Your contact only for those who want to publish (Email address, GitHub account, or Twitter account)
    • Brief description of your work (E.g. side-scrolling platform game)
    • Captured screen GIF

    I look forward to many interesting works!

    help wanted question 
    opened by kitao 41
  • Let's exchange information to improve Pyxel's web support

    Let's exchange information to improve Pyxel's web support

    Thanks to everyone's great efforts, now Pyxel works on web browsers. Here is the test site of web features: https://kitao.github.io/pyxel/wasm/

    It's working, but there are various limitations and points that could be improved. Therefore, please provide information that will lead to improvement.

    Especially I would like to improve following points with priority:

    • Fix mouse-handling functions
    • Handle touch events on smart phones
    • Suppress various errors occurring during execution
    • Safe way to exit with pyxel::quit
    • Appropriately sized and positioned screen display regardless of PC or smart phones
    • Make a github action to build wheels for many platforms
    • Use (un-patched) Pyodide and SDL2
    • Clarify the way to link Python statically like Pygame in terms of performance (also need to confirm its necessity)
    • Make HTML/JavaScript template to run Pyxel's code

    Regardless of these issues, please feel free to discuss various web-related matters with me!

    enhancement help wanted 
    opened by kitao 31
  • Please tell me your work with Pyxel (Part2)

    Please tell me your work with Pyxel (Part2)

    Hi Pyxel users,

    I would like to create a page that introduces Pyxel user examples like this. So could you tell me your work with Pyxel by replying this issue? Previous parts: part1

    The information I want is below:

    Your work's title URL of the work only for those who want to publish Your name Your contact only for those who want to publish (Email address, GitHub account, or Twitter account) Brief description of your work (E.g. side-scrolling platform game) Captured screen GIF I look forward to many interesting works!

    opened by kitao 27
  • Please help with translating READMEs for Pyxel 1.5.0

    Please help with translating READMEs for Pyxel 1.5.0

    Hi all,

    I released Pyxel 1.5.0 but its READMEs are not translated perfectly and some parts are written in English. It would be appreciated if some volunteers help with translation.

    Especially volunteer members who translated READMEs before, please consider it. Thank you. @YifangSun @humrochagf @gamwe6 @grewn0uille @Nadpher @dora-0 @KoschenkoVlad @Koshchanka

    help wanted 
    opened by kitao 23
  • Installation instructions for Debian do not work

    Installation instructions for Debian do not work

    Not sure about the causes, but following the installation instructions for Debian do not lead to a working installation. The glfw Python module is not able to find the library that is installed via apt. Failing with "failed to load glfw3 shared library". Compiling and installing the GLFW library from source solves this. Of course this is a bug in the glfw wrapper and not in pyxel, but it leads to instructions that do not work.

    help wanted 
    opened by doxanthropos 23
  • Pyxel's text(x, y, string, color) function silently fails to print text to the screen.

    Pyxel's text(x, y, string, color) function silently fails to print text to the screen.

    On my Debian buster machine I added a single call to Pyxel's text() function to the introductory example code in the README:

    import pyxel
    
    pyxel.init(160, 120)
    
    def update():
        if pyxel.btnp(pyxel.KEY_Q):
            pyxel.quit()
    
    def draw():
        pyxel.cls(0)
        pyxel.rect(10, 10, 20, 20, 11)
        pyxel.text(10, 10, "This is a sentence.", 11)
    
    pyxel.run(update, draw)
    

    and ran it, resulting in the following screenshot, which has the specified rectangle but the text is nowhere to be found:

    2018-08-03-120320_1600x900_scrot

    All apt packages installed successfully as required in the README:

    Reading package lists...
    Building dependency tree...
    Reading state information...
    libasound2-dev is already the newest version (1.1.6-1).
    libglfw3 is already the newest version (3.2.1-1).
    libportaudio2 is already the newest version (19.6.0-1).
    python3-pip is already the newest version (9.0.1-2.3).
    python3 is already the newest version (3.6.6-1).
    0 upgraded, 0 newly installed, 0 to remove and 908 not upgraded.
    

    and pip3 also had no errors installing required packages:

    Collecting pyxel
      Using cached https://files.pythonhosted.org/packages/3d/2f/25879681cf00bc1d607322b4c59a3cfd768fa9b092910fde72194332ed34/pyxel-0.7.4-py3-none-any.whl
    Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (from pyxel)
    Collecting PyOpenGL (from pyxel)
    Collecting sounddevice (from pyxel)
      Using cached https://files.pythonhosted.org/packages/fb/5d/0e6cf5ce99b99e76a24b573b94f9009d9d2f5cd13a73825d7e681c9a7a96/sounddevice-0.3.11-py2.py3-none-any.whl
    Requirement already satisfied: Pillow in /usr/lib/python3/dist-packages (from pyxel)
    Collecting glfw (from pyxel)
    Collecting CFFI>=1.0 (from sounddevice->pyxel)
      Using cached https://files.pythonhosted.org/packages/6d/c0/47db8f624f3e4e2f3f27be03a93379d1ba16a1450a7b1aacfa0366e2c0dd/cffi-1.11.5-cp36-cp36m-manylinux1_x86_64.whl
    Collecting pycparser (from CFFI>=1.0->sounddevice->pyxel)
    Installing collected packages: PyOpenGL, pycparser, CFFI, sounddevice, glfw, pyxel
    Successfully installed CFFI-1.11.5 PyOpenGL-3.1.0 glfw-1.7.0 pycparser-2.18 pyxel-0.7.4 sounddevice-0.3.11
    

    OS info is as follows:

    PRETTY_NAME="Debian GNU/Linux buster/sid"
    NAME="Debian GNU/Linux"
    ID=debian
    HOME_URL="https://www.debian.org/"
    SUPPORT_URL="https://www.debian.org/support"
    BUG_REPORT_URL="https://bugs.debian.org/"
    

    I gave the text() function a look in the codebase but nothing stuck out at me as a potential issue, and no errors are printed to stdout/stderr when I run the above program.

    bug 
    opened by mattjquinn 23
  • Pyxel packager with PyInstaller

    Pyxel packager with PyInstaller

    Hi! I would like to make new utility command in Pyxel 1.2.0, which can make a standalone executable file.

    It seems that it can be realized with PyInstaller, but I'm not familiar with it.

    Could you give me some information about how to realize it by using Pyxel 1.1.x which uses SDL2?

    enhancement help wanted 
    opened by kitao 18
  • Why don't you try some CI?

    Why don't you try some CI?

    GitHub has the ability of having CI (Continous Integration) to run things on each commit. It can be also useful for checking PRs, running linters, etc. A good start would be GitHub Actions, but you can try other things.

    If you like the idea, and would need help, please ping me.

    enhancement help wanted 
    opened by DiddiLeija 14
  • not pixel perfect

    not pixel perfect

    plz see screenshots. this rectb and circb, looks not good. I use win10, python3.6.2, 1920x1080 display resolusion. no change in fullscreen(alt+enter).

    pyxel-180730-233528 pyxel-180730-233740

    help wanted 
    opened by 99p 14
  • Addding ticks and tstamp like in tic80

    Addding ticks and tstamp like in tic80

    Those new functions clearly have their python counterpart but I liked the idea of having all functionality offered through pyxel API, similar to time and tstamp from tic80.

    opened by comick 2
  • Pyxel can't be compiled on Intel Mac

    Pyxel can't be compiled on Intel Mac

    On Intel Mac with the recent Xcode environment, Pyxel can't be compiled. The situation is similar for Github Actions' hosted runner. The error happens while compiling SDL2 via rust-sdl2 and the error message is ld: library not found for -lstdc++.

    In the case of declaring CXXFLAGS="-stdlib=libc++", compilation itself is finished without errors, but runtime error symbol not found in flat namespace'___isPlatformVersionAtLeast' happens when the Python module wrapped by PyO3 and Maturin is imported.

    Regardless of declaring the env variable, Pyxel can be compiled and works on Apple Silicon Mac.

    Does anyone know how to resolve this issue? (Especially @messense , do you have any idea?)

    bug help wanted 
    opened by kitao 4
  • Please tell me your work with Pyxel (Part3)

    Please tell me your work with Pyxel (Part3)

    Hi Pyxel users,

    I would like to create a page that introduces Pyxel user examples like this. So could you tell me your work with Pyxel by replying this issue? Previous parts: Part1 Part2

    The information I want is below:

    • Your work's title
    • URL of the work only for those who want to publish
    • Your name
    • Your contact only for those who want to publish (Email address, GitHub account, or Twitter account)
    • Brief description of your work (E.g. side-scrolling platform game)
    • Captured screen GIF

    I look forward to many interesting works!

    help wanted question 
    opened by kitao 11
  • Wasm don't work on my mashine (ubuntu 20.04.5 LTS) browsers (Brave, Firefox)

    Wasm don't work on my mashine (ubuntu 20.04.5 LTS) browsers (Brave, Firefox)

    Hi kitao, Can you help me to fix this problem? When I click on browser screen, it's just show me blank screen without anythings. :( I pulled your repo on my local mashine. Screenshot_20221103_231508 After click Screenshot_20221103_232327

    opened by mehrdad-mixtape 1
  • Installation fails on Windows 10 with Python 3.8

    Installation fails on Windows 10 with Python 3.8

    On some Windows 10 computer with Python 3.8 preinstalled, installation fails for missing Rust/Cargo dependency. This should be at least mentionned on the installation page.

    image

    I'll try to reinstall a newer version of Python, but these are government provided laptop for undergraduate student, with very low disk space and no Administrator access, so it could take a bit of time.

    opened by vincentxavier 5
  • Blurry output

    Blurry output

    I'm getting a blurry output for everything. I've tried changing display scale and size with no improvement

    blur

    I'm on a M1 Macbook so not sure if it might be something to do with the resolution/display.

    opened by notbored 3
Releases(v1.9.8)
Owner
Takashi Kitao
Developer of Pyxel, a retro game engine for Python. Former game developer. Lead programmer of "Zone of the Enders" series for PlayStation.
Takashi Kitao
Create, open, manage your Python projects with ease, a project aimed to make python development experience a little better

Create, open, manage your Python projects with ease, a project aimed to make python development experience a little better

Dhravya Shah 7 Nov 18, 2022
Rust <-> Python bindings

rust-cpython Rust bindings for the python interpreter. Documentation Cargo package: cpython Copyright (c) 2015-2020 Daniel Grunwald. Rust-cpython is l

Daniel Grunwald 1.7k Dec 29, 2022
Rust bindings for the Python interpreter

PyO3 Rust bindings for Python. This includes running and interacting with Python code from a Rust binary, as well as writing native Python modules. Us

PyO3 7.2k Jan 4, 2023
A script language like Python or Lua written in Rust, with exactly the same syntax as Go's.

A script language like Python or Lua written in Rust, with exactly the same syntax as Go's.

null 1.4k Jan 1, 2023
Rust Python modules for interacting with Metaplex's NFT standard.

Simple Metaplex Metadata Decoder Install the correct Python wheel for your Python version with pip: pip install metaplex_decoder-0.1.0-cp39-cp39-manyl

Samuel Vanderwaal 11 Mar 31, 2022
lavalink-rs bindings for Python

lavasnek_rs Dev Docs: Main Site | Fallback: GitHub Pages GitHub repo GitLab repo Using the library The library is available on PyPi, and you can insta

Victoria Casasampere Fernandez 39 Dec 27, 2022
Implementation of Monte Carlo PI approximation algorithm in Rust Python bindings

rusty_pi Implementation of Monte Carlo PI approximation algorithm in Rust Python bindings. Time of 100M iterations approximation on Core i7 10th gen:

Aleksey Popov 1 Jul 6, 2022
Build a python wheel from a dynamic library

build_wheel Small utility to create a Python wheel given a pre-built dynamic library (.so, .dylib, .dll). If you are just trying to produce a wheel fr

Tangram 1 Dec 2, 2021
The polyglot bindings generator for your library (C#, C, Python, …) 🐙

Interoptopus ?? The polyglot bindings generator for your library. Interoptopus allows you to deliver high-quality system libraries to your users, and

Ralf Biedert 155 Jan 3, 2023
Whitewash is python binding for Ammonia.

Whitewash Whitewash is python binding for Ammonia. Ammonia is a whitelist-based HTML sanitization library. It is designed to prevent cross-site script

Vivek Kushwaha 1 Nov 23, 2021
A simple library to allow for easy use of python from rust.

Rustpy A simple library to allow for easy use of python from rust. Status Currently this library has not received much love (pull requests welcome for

Luke 74 Jun 20, 2022
Pyo3 - Rust bindings for the Python interpreter

PyO3 Rust bindings for Python, including tools for creating native Python extension modules. Running and interacting with Python code from a Rust bina

PyO3 7.2k Jan 2, 2023
RustPython - A Python Interpreter written in Rust

RustPython A Python-3 (CPython >= 3.9.0) Interpreter written in Rust ?? ?? ?? . Usage Check out our online demo running on WebAssembly. RustPython req

null 13.3k Jan 2, 2023
Robust and Fast tokenizations alignment library for Rust and Python

Robust and Fast tokenizations alignment library for Rust and Python Demo: demo Rust document: docs.rs Blog post: How to calculate the alignment betwee

Explosion 157 Dec 28, 2022
Very experimental Python bindings for the Rust biscuit-auth library

Overview This is a very experimental take on Python bindings for the biscuit_auth Rust library. It is very much a work in progress (limited testing, m

Josh Wright 5 Sep 14, 2022
Python bindings for heck, the Rust case conversion library

pyheck PyHeck is a case conversion library (for converting strings to snake_case, camelCase etc). It is a thin wrapper around the Rust library heck. R

Kevin Heavey 35 Nov 7, 2022
Arrowdantic is a small Python library backed by a mature Rust implementation of Apache Arrow

Welcome to arrowdantic Arrowdantic is a small Python library backed by a mature Rust implementation of Apache Arrow that can interoperate with Parquet

Jorge Leitao 52 Dec 21, 2022
Ypy - a Python binding for Y-CRDT

Ypy is a Python binding for Y-CRDT. It provides distributed data types that enable real-time collaboration between devices. Ypy can sync data with any other platform that has a Y-CRDT binding, allowing for seamless cross-domain communication. The library is a thin wrapper around Yrs, taking advantage of the safety and performance of Rust.

null 51 Dec 20, 2022
Python module implemented in Rust for counting the number of one bits in a numpy array.

bit-counter Package for counting the number of one bits in a numpy array of uint8 values. Implemented as a Python module using Rust, providing high pe

Andrew MacDonald 3 Jul 9, 2022