blob: 339d8b7635943b5f89188375a64b8f04f2ff5004 [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``)
Alex Stapleton2c688a42014-05-04 15:22:29 +010027* ``OpenSSL 0.9.8k``
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050028* ``OpenSSL 0.9.8y``
29* ``OpenSSL 1.0.0-fips`` (``RHEL/CentOS 6.4``)
30* ``OpenSSL 1.0.1``
31* ``OpenSSL 1.0.1e-freebsd``
32* ``OpenSSL 1.0.1g``
33* ``OpenSSL 1.0.2 beta``
34
skeuomorfbc26efb2014-01-29 08:31:47 +020035On Windows
36----------
Alex Gaynor84d5c6b2014-02-02 10:12:34 -080037
Paul Kehrer156360a2014-06-30 12:14:01 -060038The wheel package on Windows is a statically linked build (as of 0.5) so all
39dependencies are included. Just run
40
41.. code-block:: console
42
43 $ pip install cryptography
44
45If you prefer to compile it yourself you'll need to have OpenSSL installed.
46There are `pre-compiled binaries`_ available. If your installation is in an
47unusual location set the ``LIB`` and ``INCLUDE`` environment variables to
Paul Kehrer2a39f7f2014-07-02 22:56:01 -050048include the corresponding locations.For example:
skeuomorfbc26efb2014-01-29 08:31:47 +020049
skeuomorfb0293bf2014-01-29 21:41:02 +020050.. code-block:: console
51
52 C:\> \path\to\vcvarsall.bat x86_amd64
Paul Kehrer2a39f7f2014-07-02 22:56:01 -050053 C:\> set LIB=C:\OpenSSL\lib\VC\static;C:\OpenSSL\lib;%LIB%
54 C:\> set INCLUDE=C:\OpenSSL\include;%INCLUDE%
55 C:\> pip install cryptography
56
57You can also choose to build statically or dynamically using the
Paul Kehrer419e67a2014-07-05 11:15:55 -050058``PYCA_WINDOWS_LINK_TYPE`` variable. Allowed values are ``static`` (default)
59and ``dynamic``.
Paul Kehrer2a39f7f2014-07-02 22:56:01 -050060
61.. code-block:: console
62
63 C:\> \path\to\vcvarsall.bat x86_amd64
64 C:\> set LIB=C:\OpenSSL\lib\VC\static;C:\OpenSSL\lib;%LIB%
65 C:\> set INCLUDE=C:\OpenSSL\include;%INCLUDE%
Paul Kehrer419e67a2014-07-05 11:15:55 -050066 C:\> set PYCA_WINDOWS_LINK_TYPE=dynamic
skeuomorfb0293bf2014-01-29 21:41:02 +020067 C:\> pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +020068
Chris Glass2e15c7f2014-02-13 19:10:10 +010069Building cryptography on Linux
70------------------------------
Chris Glass87c4edb2014-02-13 09:34:21 +010071
Chris Glass2e15c7f2014-02-13 19:10:10 +010072``cryptography`` should build very easily on Linux provided you have a C
Alex Gaynor49923842014-02-13 10:32:56 -080073compiler, headers for Python (if you're not using ``pypy``), and headers for
74the OpenSSL and ``libffi`` libraries available on your system.
Chris Glass87c4edb2014-02-13 09:34:21 +010075
Ayrxd9702f92014-02-15 23:57:13 +080076For Debian and Ubuntu, the following command will ensure that the required
Chris Glassf82d94f2014-02-13 11:46:49 +010077dependencies are installed:
Chris Glass87c4edb2014-02-13 09:34:21 +010078
79.. code-block:: console
80
Alex Gaynor49923842014-02-13 10:32:56 -080081 $ sudo apt-get install build-essential libssl-dev libffi-dev python-dev
Chris Glass87c4edb2014-02-13 09:34:21 +010082
Ayrxd9702f92014-02-15 23:57:13 +080083For Fedora and RHEL-derivatives, the following command will ensure that the
84required dependencies are installed:
Ayrxa674c6b2014-02-15 21:24:23 +080085
86.. code-block:: console
87
88 $ sudo yum install gcc libffi-devel python-devel openssl-devel
89
Chris Glass87c4edb2014-02-13 09:34:21 +010090You should now be able to build and install cryptography with the usual
91
92.. code-block:: console
93
Alex Gaynor49923842014-02-13 10:32:56 -080094 $ pip install cryptography
Chris Glass87c4edb2014-02-13 09:34:21 +010095
Alex Gaynoreb50a2c2014-05-02 09:38:33 -070096
Chris Glass2e15c7f2014-02-13 19:10:10 +010097Using your own OpenSSL on Linux
98~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skeuomorfbc26efb2014-01-29 08:31:47 +020099
100Python links to OpenSSL for its own purposes and this can sometimes cause
101problems when you wish to use a different version of OpenSSL with cryptography.
102If you want to use cryptography with your own build of OpenSSL you will need to
103make sure that the build is configured correctly so that your version of
104OpenSSL doesn't conflict with Python's.
105
106The options you need to add allow the linker to identify every symbol correctly
107even when multiple versions of the library are linked into the same program. If
108you are using your distribution's source packages these will probably be
109patched in for you already, otherwise you'll need to use options something like
110this when configuring OpenSSL:
111
112.. code-block:: console
113
114 $ ./config -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions -fPIC shared
115
116You'll also need to generate your own ``openssl.ld`` file. For example::
117
118 OPENSSL_1.0.1F_CUSTOM {
119 global:
120 *;
121 };
122
123You should replace the version string on the first line as appropriate for your
124build.
125
126Using your own OpenSSL on OS X
127------------------------------
128
129To link cryptography against a custom version of OpenSSL you'll need to set
Alex Gaynorf2441502014-05-17 20:09:33 -0700130``ARCHFLAGS``, ``LDFLAGS``, and ``CFLAGS``. OpenSSL can be installed via
131`Homebrew`_ or `MacPorts`_:
Ayrx1ced5b82014-04-08 19:41:26 +0800132
133`Homebrew`_
skeuomorfbc26efb2014-01-29 08:31:47 +0200134
135.. code-block:: console
136
137 $ brew install openssl
Ayrx1ced5b82014-04-08 19:41:26 +0800138 $ 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 +0200139
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200140or `MacPorts`_:
141
142.. code-block:: console
143
144 $ sudo port install openssl
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200145 $ env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include" pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +0200146
Alex Gaynoreb50a2c2014-05-02 09:38:33 -0700147Building cryptography with conda
148--------------------------------
149
Alex Gaynord6948382014-05-02 14:10:14 -0700150Because of a `bug in conda`_, attempting to install cryptography out of the box
David Reide162e262014-05-07 16:21:00 -0700151will result in an error. This can be resolved by setting the library path
152environment variable for your platform.
David Reide43861d2014-05-07 16:19:08 -0700153
154On OS X:
Alex Gaynord8fc2572014-05-02 10:33:36 -0700155
156.. code-block:: console
157
158 $ env DYLD_LIBRARY_PATH="$HOME/anaconda/lib" pip install cryptography
159
David Reid18563e62014-05-07 16:20:09 -0700160and on Linux:
David Reide43861d2014-05-07 16:19:08 -0700161
162.. code-block:: console
163
164 $ env LD_LIBRARY_PATH="$HOME/anaconda/lib" pip install cryptography
165
Alex Gaynord8fc2572014-05-02 10:33:36 -0700166You will need to set this variable every time you start Python. For more
Alex Gaynorf65cba22014-05-02 10:40:57 -0700167information, consult `Greg Wilson's blog post`_ on the subject.
Alex Gaynoreb50a2c2014-05-02 09:38:33 -0700168
169
skeuomorfbc26efb2014-01-29 08:31:47 +0200170.. _`Homebrew`: http://brew.sh
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200171.. _`MacPorts`: http://www.macports.org
skeuomorfbc26efb2014-01-29 08:31:47 +0200172.. _`pre-compiled binaries`: https://www.openssl.org/related/binaries.html
Alex Gaynord6948382014-05-02 14:10:14 -0700173.. _`bug in conda`: https://github.com/conda/conda-recipes/issues/110
Alex Gaynord8fc2572014-05-02 10:33:36 -0700174.. _`Greg Wilson's blog post`: http://software-carpentry.org/blog/2014/04/mr-biczo-was-right.html