Skip to content

libvips/pyvips

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyvips

pyvips experimental CFFI binding for libvips

Status

This binding passes the vips test suite cleanly and with no leaks, so it's getting close. The docs still need updating, it could use a little polish, and it currently fails with python3.

To convert old code, replace the lines:

import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips

with:

import pyvips
Vips = pyvips

Instead of the pyvips = Vips, you can also swap all Vips for pyvips with eg.:

%s/Vips/pyvips/g

Background

This is supposed to be an experiment with making a libvips binding using cffi.

http://cffi.readthedocs.io/en/latest/ref.html

The Python binding included in libvips works, but porting and installation are more difficult than they should be.

We've made a libvips binding for luajit:

https://github.com/jcupitt/lua-vips

Python's CFFI is based on luajit's ffi interface, so perhaps we can steal some of it.

The hope is that a new Python binding on top of cffi would be:

  • compatible with the current Python binding (it should run the same test suite, unmodified)
  • easier to install, since the stack would be much smaller, and there would be no issues with the overrides directory
  • faster, since we could implement Buffer and save some copies
  • faster, since we could make it "thinner". The ffi Ruby binding is about twice as fast as the gobject-introspection one, when running the test suite
  • portable across CPython, PyPy and others
  • more simply portable to Windows
  • easier to package for pip

Notes

Local user install:

$ pip install --user -e .
$ pip3 install --user -e .

Run test suite:

$ nosetests --logging-level=WARNING
$ python3 -m "nose" --logging-level=WARNING