diff options
Diffstat (limited to 'doc/source/installation.rst')
-rw-r--r-- | doc/source/installation.rst | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/doc/source/installation.rst b/doc/source/installation.rst new file mode 100644 index 0000000..4af17d5 --- /dev/null +++ b/doc/source/installation.rst @@ -0,0 +1,206 @@ +======================================================= +Installation and Status +======================================================= + +Quick installation for CPython (cffi is distributed with PyPy): + +* ``pip install cffi`` + +* or get the source code via the `Python Package Index`__. + +.. __: http://pypi.python.org/pypi/cffi + +In more details: + +This code has been developed on Linux, but should work on any POSIX +platform as well as on Windows 32 and 64. (It relies occasionally on +libffi, so it depends on libffi being bug-free; this may not be fully +the case on some of the more exotic platforms.) + +CFFI supports CPython 2.6, 2.7, 3.x (tested with 3.2 to 3.4); and is +distributed with PyPy (CFFI 1.0 is distributed with and requires +PyPy 2.6). + +The core speed of CFFI is better than ctypes, with import times being +either lower if you use the post-1.0 features, or much higher if you +don't. The wrapper Python code you typically need to write around the +raw CFFI interface slows things down on CPython, but not unreasonably +so. On PyPy, this wrapper code has a minimal impact thanks to the JIT +compiler. This makes CFFI the recommended way to interface with C +libraries on PyPy. + +Requirements: + +* CPython 2.6 or 2.7 or 3.x, or PyPy (PyPy 2.0 for the earliest + versions of CFFI; or PyPy 2.6 for CFFI 1.0). + +* in some cases you need to be able to compile C extension modules. + On non-Windows platforms, this usually means installing the package + ``python-dev``. Refer to the appropriate docs for your OS. + +* on CPython, on non-Windows platforms, you also need to install + ``libffi-dev`` in order to compile CFFI itself. + +* pycparser >= 2.06: https://github.com/eliben/pycparser (automatically + tracked by ``pip install cffi``). + +* `py.test`_ is needed to run the tests of CFFI itself. + +.. _`py.test`: http://pypi.python.org/pypi/pytest + +Download and Installation: + +* https://pypi.python.org/pypi/cffi + +* Checksums of the "source" package version 1.12.2: + + - MD5: 4d7dcb6c7c738c15d2ece9bd4c5f86da + + - SHA: 5f579d4980cbcc8aac592721f714ef6a64370ab1 + + - SHA256: e113878a446c6228669144ae8a56e268c91b7f1fafae927adc4879d9849e0ea7 + +* Or grab the most current version from the `Bitbucket page`_: + ``hg clone https://bitbucket.org/cffi/cffi`` + +* ``python setup.py install`` or ``python setup_base.py install`` + (should work out of the box on Linux or Windows; see below for + `MacOS X`_ or `Windows 64`_.) + +* running the tests: ``py.test c/ testing/`` (if you didn't + install cffi yet, you need first ``python setup_base.py build_ext -f + -i``) + +.. _`Bitbucket page`: https://bitbucket.org/cffi/cffi + +Demos: + +* The `demo`_ directory contains a number of small and large demos + of using ``cffi``. + +* The documentation below might be sketchy on details; for now the + ultimate reference is given by the tests, notably + `testing/cffi1/test_verify1.py`_ and `testing/cffi0/backend_tests.py`_. + +.. _`demo`: https://bitbucket.org/cffi/cffi/src/default/demo +.. _`testing/cffi1/test_verify1.py`: https://bitbucket.org/cffi/cffi/src/default/testing/cffi1/test_verify1.py +.. _`testing/cffi0/backend_tests.py`: https://bitbucket.org/cffi/cffi/src/default/testing/cffi0/backend_tests.py + + +Platform-specific instructions +------------------------------ + +``libffi`` is notoriously messy to install and use --- to the point that +CPython includes its own copy to avoid relying on external packages. +CFFI does the same for Windows, but not for other platforms (which should +have their own working libffi's). +Modern Linuxes work out of the box thanks to ``pkg-config``. Here are some +(user-supplied) instructions for other platforms. + + +MacOS X ++++++++ + +**Homebrew** (Thanks David Griffin for this) + +1) Install homebrew: http://brew.sh + +2) Run the following commands in a terminal + +:: + + brew install pkg-config libffi + PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig pip install cffi + + +Alternatively, **on OS/X 10.6** (Thanks Juraj Sukop for this) + +For building libffi you can use the default install path, but then, in +``setup.py`` you need to change:: + + include_dirs = [] + +to:: + + include_dirs = ['/usr/local/lib/libffi-3.0.11/include'] + +Then running ``python setup.py build`` complains about "fatal error: error writing to -: Broken pipe", which can be fixed by running:: + + ARCHFLAGS="-arch i386 -arch x86_64" python setup.py build + +as described here_. + +.. _here: http://superuser.com/questions/259278/python-2-6-1-pycrypto-2-3-pypi-package-broken-pipe-during-build + + +Windows (regular 32-bit) +++++++++++++++++++++++++ + +Win32 works and is tested at least each official release. + +The recommended C compiler compatible with Python 2.7 is this one: +http://www.microsoft.com/en-us/download/details.aspx?id=44266 +There is a known problem with distutils on Python 2.7, as +explained in https://bugs.python.org/issue23246, and the same +problem applies whenever you want to run compile() to build a dll with +this specific compiler suite download. +``import setuptools`` might help, but YMMV + +For Python 3.4 and beyond: +https://www.visualstudio.com/en-us/downloads/visual-studio-2015-ctp-vs + + +Windows 64 +++++++++++ + +Win64 received very basic testing and we applied a few essential +fixes in cffi 0.7. The comment above applies for Python 2.7 on +Windows 64 as well. Please report any other issue. + +Note as usual that this is only about running the 64-bit version of +Python on the 64-bit OS. If you're running the 32-bit version (the +common case apparently), then you're running Win32 as far as we're +concerned. + +.. _`issue 9`: https://bitbucket.org/cffi/cffi/issue/9 +.. _`Python issue 7546`: http://bugs.python.org/issue7546 + + +Linux and OS/X: UCS2 versus UCS4 +++++++++++++++++++++++++++++++++ + +This is about getting an ImportError about ``_cffi_backend.so`` with a +message like ``Symbol not found: _PyUnicodeUCS2_AsASCIIString``. This +error occurs in Python 2 as soon as you mix "ucs2" and "ucs4" builds of +Python. It means that you are now running a Python compiled with +"ucs4", but the extension module ``_cffi_backend.so`` was compiled by a +different Python: one that was running "ucs2". (If the opposite problem +occurs, you get an error about ``_PyUnicodeUCS4_AsASCIIString`` +instead.) + +If you are using ``pyenv``, then see +https://github.com/yyuu/pyenv/issues/257. + +More generally, the solution that should always work is to download the +sources of CFFI (instead of a prebuilt binary) and make sure that you +build it with the same version of Python than the one that will use it. +For example, with virtualenv: + +* ``virtualenv ~/venv`` + +* ``cd ~/path/to/sources/of/cffi`` + +* ``~/venv/bin/python setup.py build --force`` # forcing a rebuild to + make sure + +* ``~/venv/bin/python setup.py install`` + +This will compile and install CFFI in this virtualenv, using the +Python from this virtualenv. + + +NetBSD +++++++ + +You need to make sure you have an up-to-date version of libffi, which +fixes some bugs. |