blob: 3ebbecfdaea53b4a491164f1f2dc17d9271d1560 [file] [log] [blame]
Alex Gaynor84d5c6b2014-02-02 10:12:34 -08001Installation
2============
skeuomorfbc26efb2014-01-29 08:31:47 +02003
4You can install ``cryptography`` with ``pip``:
5
6.. code-block:: console
7
8 $ pip install cryptography
9
Alex Stapletonb4684172014-03-15 18:02:13 +000010Supported platforms
11-------------------
12
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050013Currently we test ``cryptography`` on Python 2.6, 2.7, 3.2, 3.3, 3.4 and PyPy
14on these operating systems.
Alex Stapletonb4684172014-03-15 18:02:13 +000015
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050016* x86-64 CentOS 6.4 and CentOS 5.x
Alex Stapletonb4684172014-03-15 18:02:13 +000017* x86-64 FreeBSD 9.2 and FreeBSD 10
Paul Kehrerc354a2b2014-04-15 18:34:27 -040018* OS X 10.9 Mavericks, 10.8 Mountain Lion, and 10.7 Lion
Alex Stapletonb10e9542014-03-15 18:09:33 +000019* x86-64 Ubuntu 12.04 LTS
Alex Stapleton13432b22014-03-15 19:18:16 +000020* 32-bit Python on 64-bit Windows Server 2008
Paul Kehrer8ec8a862014-04-15 18:01:51 -040021* 64-bit Python on 64-bit Windows Server 2012
Alex Stapletonb4684172014-03-15 18:02:13 +000022
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050023We test compiling with ``clang`` as well as ``gcc`` and use the following
24OpenSSL releases:
25
26* ``OpenSSL 0.9.8e-fips-rhel5`` (``RHEL/CentOS 5``)
27* ``OpenSSL 0.9.8y``
28* ``OpenSSL 1.0.0-fips`` (``RHEL/CentOS 6.4``)
29* ``OpenSSL 1.0.1``
30* ``OpenSSL 1.0.1e-freebsd``
31* ``OpenSSL 1.0.1g``
32* ``OpenSSL 1.0.2 beta``
33
skeuomorfbc26efb2014-01-29 08:31:47 +020034On Windows
35----------
Alex Gaynor84d5c6b2014-02-02 10:12:34 -080036
skeuomorfb0293bf2014-01-29 21:41:02 +020037If you're on Windows you'll need to make sure you have OpenSSL installed.
38There are `pre-compiled binaries`_ available. If your installation is in
39an unusual location set the ``LIB`` and ``INCLUDE`` environment variables
40to include the corresponding locations. For example:
skeuomorfbc26efb2014-01-29 08:31:47 +020041
skeuomorfb0293bf2014-01-29 21:41:02 +020042.. code-block:: console
43
44 C:\> \path\to\vcvarsall.bat x86_amd64
Paul Kehrer8ec8a862014-04-15 18:01:51 -040045 C:\> set LIB=C:\OpenSSL-1.0.1g-64bit\lib;%LIB%
46 C:\> set INCLUDE=C:\OpenSSL-1.0.1g-64bit\include;%INCLUDE%
skeuomorfb0293bf2014-01-29 21:41:02 +020047 C:\> pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +020048
Chris Glass2e15c7f2014-02-13 19:10:10 +010049Building cryptography on Linux
50------------------------------
Chris Glass87c4edb2014-02-13 09:34:21 +010051
Chris Glass2e15c7f2014-02-13 19:10:10 +010052``cryptography`` should build very easily on Linux provided you have a C
Alex Gaynor49923842014-02-13 10:32:56 -080053compiler, headers for Python (if you're not using ``pypy``), and headers for
54the OpenSSL and ``libffi`` libraries available on your system.
Chris Glass87c4edb2014-02-13 09:34:21 +010055
Ayrxd9702f92014-02-15 23:57:13 +080056For Debian and Ubuntu, the following command will ensure that the required
Chris Glassf82d94f2014-02-13 11:46:49 +010057dependencies are installed:
Chris Glass87c4edb2014-02-13 09:34:21 +010058
59.. code-block:: console
60
Alex Gaynor49923842014-02-13 10:32:56 -080061 $ sudo apt-get install build-essential libssl-dev libffi-dev python-dev
Chris Glass87c4edb2014-02-13 09:34:21 +010062
Ayrxd9702f92014-02-15 23:57:13 +080063For Fedora and RHEL-derivatives, the following command will ensure that the
64required dependencies are installed:
Ayrxa674c6b2014-02-15 21:24:23 +080065
66.. code-block:: console
67
68 $ sudo yum install gcc libffi-devel python-devel openssl-devel
69
Chris Glass87c4edb2014-02-13 09:34:21 +010070You should now be able to build and install cryptography with the usual
71
72.. code-block:: console
73
Alex Gaynor49923842014-02-13 10:32:56 -080074 $ pip install cryptography
Chris Glass87c4edb2014-02-13 09:34:21 +010075
Chris Glass2e15c7f2014-02-13 19:10:10 +010076Using your own OpenSSL on Linux
77~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skeuomorfbc26efb2014-01-29 08:31:47 +020078
79Python links to OpenSSL for its own purposes and this can sometimes cause
80problems when you wish to use a different version of OpenSSL with cryptography.
81If you want to use cryptography with your own build of OpenSSL you will need to
82make sure that the build is configured correctly so that your version of
83OpenSSL doesn't conflict with Python's.
84
85The options you need to add allow the linker to identify every symbol correctly
86even when multiple versions of the library are linked into the same program. If
87you are using your distribution's source packages these will probably be
88patched in for you already, otherwise you'll need to use options something like
89this when configuring OpenSSL:
90
91.. code-block:: console
92
93 $ ./config -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions -fPIC shared
94
95You'll also need to generate your own ``openssl.ld`` file. For example::
96
97 OPENSSL_1.0.1F_CUSTOM {
98 global:
99 *;
100 };
101
102You should replace the version string on the first line as appropriate for your
103build.
104
105Using your own OpenSSL on OS X
106------------------------------
107
108To link cryptography against a custom version of OpenSSL you'll need to set
Ayrx1ced5b82014-04-08 19:41:26 +0800109``ARCHFLAGS``, ``LDFLAGS``, and ``CFLAGS``. OpenSSL can be installed via `Homebrew`_ or `MacPorts`_:
110
111`Homebrew`_
skeuomorfbc26efb2014-01-29 08:31:47 +0200112
113.. code-block:: console
114
115 $ brew install openssl
Ayrx1ced5b82014-04-08 19:41:26 +0800116 $ env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +0200117
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200118or `MacPorts`_:
119
120.. code-block:: console
121
122 $ sudo port install openssl
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200123 $ env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include" pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +0200124
125.. _`Homebrew`: http://brew.sh
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200126.. _`MacPorts`: http://www.macports.org
skeuomorfbc26efb2014-01-29 08:31:47 +0200127.. _`pre-compiled binaries`: https://www.openssl.org/related/binaries.html