Installing PyCairo in virtualenv (Debian/Ubuntu)
Googled a lot to find a solution for installing PyCairo in virtualenv but ended up without any perfect solution. Hope my solution gonna help you a bit.
Create Virtualenv
# for python2
$ virtualenv -p python2 env
# for python3
$ virtualenv -p python3 env
Activate Virtualenv
$ source env/bin/acivate
Download and Extract PyCairo
python 2.x (>=2.6)
(env)$ wget -c http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2
(env)$ tar jxvf py2cairo-1.10.0.tar.bz2
(env)$ cd py2cairo-1.10.0
python 3.x (>=3.1)
(env)$ wget -c http://cairographics.org/releases/pycairo-1.10.0.tar.bz2
(env)$ tar jxvf pycairo-1.10.0.tar.bz2
(env)$ cd pycairo-1.10.0
waflib problem fix
replace waf faile
(env)$ wget -c --no-check-certificate https://ftp.waf.io/pub/release/waf-1.8.7 -O waf
(env)$ chmod 777 waf
replace wscript
(env)$ vi wscript
# -*- python -*-
import os
top = '.'
out = 'build_directory'
d = top
APPNAME='py2cairo'
VERSION='1.10.0'
cairo_version_required = '1.10.0'
def options(ctx):
print(' %s/options()' %d)
ctx.load('gnu_dirs')
ctx.load('compiler_c')
ctx.load('python') # options for disabling pyc or pyo compilation
def configure(ctx):
print(' %s/configure()' %d)
env = ctx.env
ctx.load('gnu_dirs')
ctx.load('compiler_c')
ctx.load('python')
ctx.check_python_version((2,6,0))
ctx.check_python_headers()
ctx.check_cfg(package='cairo', atleast_version=cairo_version_required,
args='--cflags --libs')
# add gcc options
if env['CC_NAME'] == 'gcc':
env.append_unique('CCFLAGS', ['-std=c99', '-Wall'])
version = [int(s) for s in VERSION.split('.')]
ctx.define('VERSION', VERSION)
ctx.define('PYCAIRO_VERSION_MAJOR', version[0])
ctx.define('PYCAIRO_VERSION_MINOR', version[1])
ctx.define('PYCAIRO_VERSION_MICRO', version[2])
ctx.write_config_header('src/config.h')
print("Configuration:")
print("%-40s : %s" % ('PREFIX', env['PREFIX']))
print("%-40s : %s" % ('LIBDIR', env['LIBDIR']))
def build(ctx):
print(' %s/build()' %d)
ctx.recurse('src')
# generate and install the .pc file
ctx(
features = 'subst',
source = 'pycairo.pc.in',
target = 'pycairo.pc',
dct = {
'VERSION' : VERSION,
'prefix' : ctx.env['PREFIX'],
'includedir': os.path.join(ctx.env['PREFIX'], 'include'),
},
install_path = os.path.join(ctx.env['LIBDIR'], 'pkgconfig'),
)
def dist(ctx):
# exclude these files from the distribution archive
exclude = (
'build_directory/',
'doc/_static/',
'doc/_templates/',
'doc/_build/doctrees/',
'doc/_build/html/_sources/',
'examples/cairo_snippets/c_to_python.py',
'RELEASING',
'.git/',
'**/.gitignore',
'**/.lock-w*',
'.waf*',
'**/*.pdf',
'**/*.png',
'**/*.pyc',
'**/*.ps',
'**/*.svg',
# autoconf specific files
'**/Makefile',
'autogen.sh',
'autom4*',
'config.log',
'config.guess',
'config.sub',
'depcomp',
'install-sh',
'missing',
'py-compile',
'src/.deps/',
'src/.libs/',
'**/*.lo',
'**/stamp-h1',
)
ctx.excl = ' '.join(exclude)
Install
(env)$ ./waf configure --prefix=$VIRTUAL_ENV --libdir=$VIRTUAL_ENV/lib
(env)$ ./waf build
(env)$ ./waf install
Check installation by importing
(env)$ python -c "import cairo"
(env)$ :)