blob: 163986ad082eb56a4ef3a5e640a13df505e67cb2 [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 Kehrere3a2fb22017-06-26 15:08:33 -100013Currently we test ``cryptography`` on Python 2.6, 2.7, 3.4, 3.5, 3.6, and
Paul Kehrer6a10b292017-05-27 19:32:26 -050014PyPy 5.3+ on these operating systems.
Alex Stapletonb4684172014-03-15 18:02:13 +000015
Paul Kehrer6a10b292017-05-27 19:32:26 -050016* x86-64 CentOS 7.x
17* x86-64 FreeBSD 11
Alex Gaynor2240ba22017-05-20 13:23:15 -070018* macOS 10.12 Sierra, 10.11 El Capitan, 10.10 Yosemite, 10.9 Mavericks
Paul Kehrer6a10b292017-05-27 19:32:26 -050019* x86-64 Ubuntu 14.04, 16.04, and rolling
20* x86-64 Debian Wheezy (7.x), Jessie (8.x), Stretch (9.x), and Sid (unstable)
Paul Kehrer1eeaabb2017-07-01 17:34:36 -050021* x86-64 Alpine (latest)
Paul Kehrerda742982015-10-01 21:10:26 -050022* 32-bit and 64-bit Python on 64-bit Windows Server 2012
Alex Stapletonb4684172014-03-15 18:02:13 +000023
Paul Kehrer56b360a2015-12-31 19:59:25 -060024.. warning::
25 Python 2.6 is no longer supported by the Python core team. A future version
26 of cryptography will drop support for this version.
27
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050028We test compiling with ``clang`` as well as ``gcc`` and use the following
29OpenSSL releases:
30
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050031* ``OpenSSL 1.0.1``
Paul Kehrere683dee2014-08-09 08:15:23 -100032* ``OpenSSL 1.0.1e-fips`` (``RHEL/CentOS 7``)
Paul Kehrerda742982015-10-01 21:10:26 -050033* ``OpenSSL 1.0.1f``
Alex Gaynora5094962017-07-03 18:00:52 -040034* ``OpenSSL 1.0.1j-freebsd``
Paul Kehrerda742982015-10-01 21:10:26 -050035* ``OpenSSL 1.0.2-latest``
Alex Gaynor7a158272016-12-18 16:49:47 -050036* ``OpenSSL 1.1.0-latest``
Paul Kehrerfb8dcdb2014-04-20 19:25:18 -050037
Nick Badger63bbf182016-09-03 10:10:36 -070038Building cryptography on Windows
39--------------------------------
Alex Gaynor84d5c6b2014-02-02 10:12:34 -080040
Paul Kehrer156360a2014-06-30 12:14:01 -060041The wheel package on Windows is a statically linked build (as of 0.5) so all
Nick Badger63bbf182016-09-03 10:10:36 -070042dependencies are included. To install ``cryptography``, you will typically
43just run
Paul Kehrer156360a2014-06-30 12:14:01 -060044
45.. code-block:: console
46
47 $ pip install cryptography
48
49If you prefer to compile it yourself you'll need to have OpenSSL installed.
Paul Kehrer6608b7e2015-07-24 21:52:17 +010050You can compile OpenSSL yourself as well or use the binaries we build for our
Paul Kehrer937aa472015-10-11 12:09:27 -050051release infrastructure (`openssl-release`_). Be sure to download the proper
52version for your architecture and Python (2010 works for Python 2.6, 2.7, 3.3,
Paul Kehrerf19fef12017-02-09 13:53:44 +080053and 3.4 while 2015 is required for 3.5 and above). Wherever you place your copy
Paul Kehrer6608b7e2015-07-24 21:52:17 +010054of OpenSSL you'll need to set the ``LIB`` and ``INCLUDE`` environment variables
55to include the proper locations. For example:
skeuomorfbc26efb2014-01-29 08:31:47 +020056
skeuomorfb0293bf2014-01-29 21:41:02 +020057.. code-block:: console
58
59 C:\> \path\to\vcvarsall.bat x86_amd64
Paul Kehrer6608b7e2015-07-24 21:52:17 +010060 C:\> set LIB=C:\OpenSSL-win64\lib;%LIB%
61 C:\> set INCLUDE=C:\OpenSSL-win64\include;%INCLUDE%
Paul Kehrer2a39f7f2014-07-02 22:56:01 -050062 C:\> pip install cryptography
63
Paul Kehrerf19fef12017-02-09 13:53:44 +080064As of OpenSSL 1.1.0 the library names have changed from ``libeay32`` and
65``ssleay32`` to ``libcrypto`` and ``libssl`` (matching their names on all other
Paul Kehreradeaacf2017-05-24 12:49:18 -070066platforms). ``cryptography`` links against the new 1.1.0 names by default. If
67you need to compile ``cryptography`` against an older version then you **must**
68set ``CRYPTOGRAPHY_WINDOWS_LINK_LEGACY_OPENSSL`` or else installation will fail.
Paul Kehrerf19fef12017-02-09 13:53:44 +080069
Paul Kehrerd4ea53b2015-12-31 19:48:32 -060070If you need to rebuild ``cryptography`` for any reason be sure to clear the
71local `wheel cache`_.
skeuomorfbc26efb2014-01-29 08:31:47 +020072
Cory Benfield6d447282015-10-07 14:50:50 +010073.. _build-on-linux:
74
Chris Glass2e15c7f2014-02-13 19:10:10 +010075Building cryptography on Linux
76------------------------------
Chris Glass87c4edb2014-02-13 09:34:21 +010077
Paul Kehrer1eeaabb2017-07-01 17:34:36 -050078``cryptography`` ships a ``manylinux1`` wheel (as of 2.0) so all dependencies
79are included. For users on pip 8.1 or above running on a ``manylinux1``
80compatible distribution (almost everything except Alpine) all you should
81need to do is:
Chris Glass87c4edb2014-02-13 09:34:21 +010082
83.. code-block:: console
84
Paul Kehrer1eeaabb2017-07-01 17:34:36 -050085 $ pip install cryptography
Chris Glass87c4edb2014-02-13 09:34:21 +010086
Paul Kehrer1eeaabb2017-07-01 17:34:36 -050087If you are on Alpine or just want to compile it yourself then
88``cryptography`` requires a compiler, headers for Python (if you're not
89using ``pypy``), and headers for the OpenSSL and ``libffi`` libraries
90available on your system.
91
92Alpine
93~~~~~~
94
95Replace ``python3-dev`` with ``python-dev`` if you're using Python 2.
96
97.. code-block:: console
98
99 $ sudo apk add gcc musl-dev python3-dev libffi-dev openssl-dev
100
101If you get an error with ``openssl-dev`` you may have to use ``libressl-dev``.
102
103Debian/Ubuntu
104~~~~~~~~~~~~~
105
106Replace ``python3-dev`` with ``python-dev`` if you're using Python 2.
107
108.. code-block:: console
109
110 $ sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
111
112RHEL/CentOS
113~~~~~~~~~~~
Ayrxa674c6b2014-02-15 21:24:23 +0800114
115.. code-block:: console
116
117 $ sudo yum install gcc libffi-devel python-devel openssl-devel
118
Paul Kehrer1eeaabb2017-07-01 17:34:36 -0500119
120Building
121~~~~~~~~
122
123You should now be able to build and install cryptography. To avoid getting
124the pre-built wheel on ``manylinux1`` distributions you'll need to use
125``--no-binary``.
Chris Glass87c4edb2014-02-13 09:34:21 +0100126
127.. code-block:: console
128
Paul Kehrer1eeaabb2017-07-01 17:34:36 -0500129 $ pip install cryptography --no-binary cryptography
Chris Glass87c4edb2014-02-13 09:34:21 +0100130
Alex Gaynoreb50a2c2014-05-02 09:38:33 -0700131
Chris Glass2e15c7f2014-02-13 19:10:10 +0100132Using your own OpenSSL on Linux
133~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skeuomorfbc26efb2014-01-29 08:31:47 +0200134
135Python links to OpenSSL for its own purposes and this can sometimes cause
136problems when you wish to use a different version of OpenSSL with cryptography.
137If you want to use cryptography with your own build of OpenSSL you will need to
138make sure that the build is configured correctly so that your version of
139OpenSSL doesn't conflict with Python's.
140
141The options you need to add allow the linker to identify every symbol correctly
142even when multiple versions of the library are linked into the same program. If
143you are using your distribution's source packages these will probably be
144patched in for you already, otherwise you'll need to use options something like
145this when configuring OpenSSL:
146
147.. code-block:: console
148
149 $ ./config -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions -fPIC shared
150
151You'll also need to generate your own ``openssl.ld`` file. For example::
152
Alex Gaynor46c0c622017-03-22 22:56:26 -0400153 OPENSSL_1.1.0E_CUSTOM {
skeuomorfbc26efb2014-01-29 08:31:47 +0200154 global:
155 *;
156 };
157
158You should replace the version string on the first line as appropriate for your
159build.
160
Cory Benfield6d447282015-10-07 14:50:50 +0100161Static Wheels
162~~~~~~~~~~~~~
163
Paul Kehrer524e7452017-03-09 19:18:24 -0400164Cryptography ships statically-linked wheels for macOS and Windows, ensuring
165that these platforms can always use the most-recent OpenSSL, regardless of what
166is shipped by default on those platforms. As a result of various difficulties
Cory Benfield6d447282015-10-07 14:50:50 +0100167around Linux binary linking, Cryptography cannot do the same on Linux.
168
169However, you can build your own statically-linked wheels that will work on your
170own systems. This will allow you to continue to use relatively old Linux
171distributions (such as LTS releases), while making sure you have the most
172recent OpenSSL available to your Python programs.
173
174To do so, you should find yourself a machine that is as similar as possible to
175your target environment (e.g. your production environment): for example, spin
176up a new cloud server running your target Linux distribution. On this machine,
177install the Cryptography dependencies as mentioned in :ref:`build-on-linux`.
178Please also make sure you have `virtualenv`_ installed: this should be
179available from your system package manager.
180
Cory Benfield80781842015-10-07 15:07:57 +0100181Then, paste the following into a shell script. You'll need to populate the
182``OPENSSL_VERSION`` variable. To do that, visit `openssl.org`_ and find the
183latest non-FIPS release version number, then set the string appropriately. For
Alex Gaynor46c0c622017-03-22 22:56:26 -0400184example, for OpenSSL 1.0.2k, use ``OPENSSL_VERSION="1.0.2k"``.
Cory Benfield6d447282015-10-07 14:50:50 +0100185
186When this shell script is complete, you'll find a collection of wheel files in
187a directory called ``wheelhouse``. These wheels can be installed by a
188sufficiently-recent version of ``pip``. The Cryptography wheel in this
189directory contains a statically-linked OpenSSL binding, which ensures that you
190have access to the most-recent OpenSSL releases without corrupting your system
191dependencies.
192
193.. code-block:: console
194
195 set -e
196
Cory Benfield80781842015-10-07 15:07:57 +0100197 OPENSSL_VERSION="VERSIONGOESHERE"
Cory Benfield6d447282015-10-07 14:50:50 +0100198 CWD=$(pwd)
199
200 virtualenv env
201 . env/bin/activate
202 pip install -U setuptools
203 pip install -U wheel pip
Matt Thomasa187c972016-10-03 17:48:31 -0400204 curl -O https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
Cory Benfield6d447282015-10-07 14:50:50 +0100205 tar xvf openssl-${OPENSSL_VERSION}.tar.gz
206 cd openssl-${OPENSSL_VERSION}
Alex Gaynor46c0c622017-03-22 22:56:26 -0400207 ./config no-shared no-ssl2 no-ssl3 -fPIC --prefix=${CWD}/openssl
Cory Benfield6d447282015-10-07 14:50:50 +0100208 make && make install
209 cd ..
Cory Benfield09d1b472015-10-16 08:14:42 +0100210 CFLAGS="-I${CWD}/openssl/include" LDFLAGS="-L${CWD}/openssl/lib" pip wheel --no-use-wheel cryptography
Cory Benfield6d447282015-10-07 14:50:50 +0100211
Paul Kehrer524e7452017-03-09 19:18:24 -0400212Building cryptography on macOS
213------------------------------
Paul Kehrer451c8df2015-07-04 11:03:27 -0500214
Paul Kehrera17d5902016-03-20 22:29:17 -0400215.. note::
216
217 If installation gives a ``fatal error: 'openssl/aes.h' file not found``
218 see the :doc:`FAQ </faq>` for information about how to fix this issue.
219
Paul Kehrer524e7452017-03-09 19:18:24 -0400220The wheel package on macOS is a statically linked build (as of 1.0.1) so for
Paul Kehrera17d5902016-03-20 22:29:17 -0400221users with pip 8 or above you only need one step:
Paul Kehrer451c8df2015-07-04 11:03:27 -0500222
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500223.. code-block:: console
skeuomorfbc26efb2014-01-29 08:31:47 +0200224
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500225 $ pip install cryptography
226
Paul Kehrer524e7452017-03-09 19:18:24 -0400227If you want to build cryptography yourself or are on an older macOS version,
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500228cryptography requires the presence of a C compiler, development headers, and
Paul Kehrer524e7452017-03-09 19:18:24 -0400229the proper libraries. On macOS much of this is provided by Apple's Xcode
230development tools. To install the Xcode command line tools (on macOS 10.9+)
Paul Kehrerb29f4642015-12-31 23:27:25 -0600231open a terminal window and run:
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500232
233.. code-block:: console
234
235 $ xcode-select --install
236
237This will install a compiler (clang) along with (most of) the required
238development headers.
239
240You'll also need OpenSSL, which you can obtain from `Homebrew`_ or `MacPorts`_.
Paul Kehrer355174a2015-12-22 09:47:26 -0600241Cryptography does **not** support Apple's deprecated OpenSSL distribution.
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500242
243To build cryptography and dynamically link it:
Ayrx1ced5b82014-04-08 19:41:26 +0800244
245`Homebrew`_
skeuomorfbc26efb2014-01-29 08:31:47 +0200246
247.. code-block:: console
248
Paul Kehrer524e7452017-03-09 19:18:24 -0400249 $ brew install openssl@1.1
250 $ env LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" CFLAGS="-I$(brew --prefix openssl@1.1)/include" pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +0200251
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500252`MacPorts`_:
Kimmo Parviainen-Jalankoe01e0bf2014-03-19 18:57:09 +0200253
254.. code-block:: console
255
256 $ sudo port install openssl
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500257 $ env LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include" pip install cryptography
258
259You can also build cryptography statically:
260
261`Homebrew`_
262
263.. code-block:: console
264
Paul Kehrer524e7452017-03-09 19:18:24 -0400265 $ brew install openssl@1.1
Paul Kehreradeaacf2017-05-24 12:49:18 -0700266 $ env CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 LDFLAGS="$(brew --prefix openssl@1.1)/lib/libssl.a $(brew --prefix openssl@1.1)/lib/libcrypto.a" CFLAGS="-I$(brew --prefix openssl@1.1)/include" pip install cryptography
Paul Kehrer1e071ac2015-09-05 16:30:25 -0500267
268`MacPorts`_:
269
270.. code-block:: console
271
272 $ sudo port install openssl
Paul Kehreradeaacf2017-05-24 12:49:18 -0700273 $ env CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1 LDFLAGS="/opt/local/lib/libssl.a /opt/local/lib/libcrypto.a" CFLAGS="-I/opt/local/include" pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +0200274
Paul Kehrerd4ea53b2015-12-31 19:48:32 -0600275If you need to rebuild ``cryptography`` for any reason be sure to clear the
276local `wheel cache`_.
277
Alex Gaynoreb50a2c2014-05-02 09:38:33 -0700278Building cryptography with conda
279--------------------------------
280
Alex Gaynore51236d2016-11-06 10:13:35 -0500281Because of a bug in conda, attempting to install cryptography out of the box
David Reide162e262014-05-07 16:21:00 -0700282will result in an error. This can be resolved by setting the library path
283environment variable for your platform.
David Reide43861d2014-05-07 16:19:08 -0700284
Paul Kehrer524e7452017-03-09 19:18:24 -0400285On macOS:
Alex Gaynord8fc2572014-05-02 10:33:36 -0700286
287.. code-block:: console
288
289 $ env DYLD_LIBRARY_PATH="$HOME/anaconda/lib" pip install cryptography
290
David Reid18563e62014-05-07 16:20:09 -0700291and on Linux:
David Reide43861d2014-05-07 16:19:08 -0700292
293.. code-block:: console
294
295 $ env LD_LIBRARY_PATH="$HOME/anaconda/lib" pip install cryptography
296
Alex Gaynord8fc2572014-05-02 10:33:36 -0700297You will need to set this variable every time you start Python. For more
Alex Gaynorf65cba22014-05-02 10:40:57 -0700298information, consult `Greg Wilson's blog post`_ on the subject.
Alex Gaynoreb50a2c2014-05-02 09:38:33 -0700299
300
Alex Gaynor5ad6df92017-02-18 12:52:50 -0500301.. _`Homebrew`: https://brew.sh
Alex Gaynor3197ab52015-10-02 06:33:11 -0700302.. _`MacPorts`: https://www.macports.org
Paul Kehrer5a284e62017-05-29 17:09:23 -0500303.. _`openssl-release`: https://ci.cryptography.io/job/cryptography-support-jobs/job/openssl-release-1.1/
Alex Gaynor6422d832016-03-06 21:40:57 -0500304.. _`Greg Wilson's blog post`: https://software-carpentry.org/blog/2014/04/mr-biczo-was-right.html
Cory Benfieldba8f6382015-10-07 15:07:47 +0100305.. _virtualenv: https://virtualenv.pypa.io/en/latest/
Alex Gaynor769d5c62016-11-06 04:30:36 -0500306.. _openssl.org: https://www.openssl.org/source/
Paul Kehrerd4ea53b2015-12-31 19:48:32 -0600307.. _`wheel cache`: https://pip.pypa.io/en/stable/reference/pip_install/#caching