blob: 595ccc8354e18e35256808c52539166c43229083 [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
skeuomorfbc26efb2014-01-29 08:31:47 +020010On Windows
11----------
Alex Gaynor84d5c6b2014-02-02 10:12:34 -080012
skeuomorfb0293bf2014-01-29 21:41:02 +020013If you're on Windows you'll need to make sure you have OpenSSL installed.
14There are `pre-compiled binaries`_ available. If your installation is in
15an unusual location set the ``LIB`` and ``INCLUDE`` environment variables
16to include the corresponding locations. For example:
skeuomorfbc26efb2014-01-29 08:31:47 +020017
skeuomorfb0293bf2014-01-29 21:41:02 +020018.. code-block:: console
19
20 C:\> \path\to\vcvarsall.bat x86_amd64
21 C:\> set LIB=C:\OpenSSL-1.0.1f-64bit\lib;%LIB%
22 C:\> set INCLUDE=C:\OpenSSL-1.0.1f-64bit\include;%INCLUDE%
23 C:\> pip install cryptography
skeuomorfbc26efb2014-01-29 08:31:47 +020024
Chris Glass2e15c7f2014-02-13 19:10:10 +010025Building cryptography on Linux
26------------------------------
Chris Glass87c4edb2014-02-13 09:34:21 +010027
Chris Glass2e15c7f2014-02-13 19:10:10 +010028``cryptography`` should build very easily on Linux provided you have a C
Chris Glassae20caa2014-02-13 13:47:28 +010029compiler, headers for Python (if you're not using `pypy`), and headers for the
Chris Glass03829e52014-02-13 13:07:55 +010030OpenSSL and `libffi` libraries available on your system.
Chris Glass87c4edb2014-02-13 09:34:21 +010031
Chris Glassf82d94f2014-02-13 11:46:49 +010032Debian and Ubuntu systems
Chris Glass2e15c7f2014-02-13 19:10:10 +010033~~~~~~~~~~~~~~~~~~~~~~~~~
Chris Glassf82d94f2014-02-13 11:46:49 +010034
35For Debian and Ubuntu, the following command line will ensure the required
36dependencies are installed:
Chris Glass87c4edb2014-02-13 09:34:21 +010037
38.. code-block:: console
39
Chris Glassf82d94f2014-02-13 11:46:49 +010040 sudo apt-get install build-essential libssl-dev libffi-dev python-dev
Chris Glass87c4edb2014-02-13 09:34:21 +010041
42You should now be able to build and install cryptography with the usual
43
44.. code-block:: console
45
46 python setup.py install
47
Chris Glass2e15c7f2014-02-13 19:10:10 +010048Using your own OpenSSL on Linux
49~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skeuomorfbc26efb2014-01-29 08:31:47 +020050
51Python links to OpenSSL for its own purposes and this can sometimes cause
52problems when you wish to use a different version of OpenSSL with cryptography.
53If you want to use cryptography with your own build of OpenSSL you will need to
54make sure that the build is configured correctly so that your version of
55OpenSSL doesn't conflict with Python's.
56
57The options you need to add allow the linker to identify every symbol correctly
58even when multiple versions of the library are linked into the same program. If
59you are using your distribution's source packages these will probably be
60patched in for you already, otherwise you'll need to use options something like
61this when configuring OpenSSL:
62
63.. code-block:: console
64
65 $ ./config -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions -fPIC shared
66
67You'll also need to generate your own ``openssl.ld`` file. For example::
68
69 OPENSSL_1.0.1F_CUSTOM {
70 global:
71 *;
72 };
73
74You should replace the version string on the first line as appropriate for your
75build.
76
77Using your own OpenSSL on OS X
78------------------------------
79
80To link cryptography against a custom version of OpenSSL you'll need to set
81``ARCHFLAGS``, ``LDFLAGS``, and ``CFLAGS``. OpenSSL can be installed via
82`Homebrew`_:
83
84.. code-block:: console
85
86 $ brew install openssl
87
88Then install cryptography linking against the brewed version:
89
90.. code-block:: console
91
92 $ env ARCHFLAGS="-arch x86_64" LDFLAGS="-L/usr/local/opt/openssl/lib" CFLAGS="-I/usr/local/opt/openssl/include" pip install cryptography
93
94
95.. _`Homebrew`: http://brew.sh
96.. _`pre-compiled binaries`: https://www.openssl.org/related/binaries.html