| Getting started |
| =============== |
| |
| Development dependencies |
| ------------------------ |
| Working on ``cryptography`` requires the installation of a small number of |
| development dependencies in addition to the dependencies for |
| :doc:`/installation`. These are listed in ``dev-requirements.txt`` and they can |
| be installed in a `virtualenv`_ using `pip`_. Before you install them, follow |
| the **build** instructions in :doc:`/installation` (be sure to stop before |
| actually installing ``cryptography``). Once you've done that, install the |
| development dependencies, and then install ``cryptography`` in ``editable`` |
| mode. For example: |
| |
| .. code-block:: console |
| |
| $ # Create a virtualenv and activate it |
| $ # Set up your cryptography build environment |
| $ pip install --requirement dev-requirements.txt |
| $ pip install --editable . |
| |
| Make sure that ``pip install --requirement ...`` has installed the Python |
| package ``vectors/`` and packages on ``tests/`` . If it didn't, you may |
| install them manually by using ``pip`` on each directory. |
| |
| You will also need to install ``enchant`` using your system's package manager |
| to check spelling in the documentation. |
| |
| .. note:: |
| There is an upstream bug in ``enchant`` that prevents its installation on |
| Windows with 64-bit Python. See `this Github issue`_ for more information. |
| The easiest workaround is to use 32-bit Python for ``cryptography`` |
| development, even on 64-bit Windows. |
| |
| You are now ready to run the tests and build the documentation. |
| |
| OpenSSL on macOS |
| ~~~~~~~~~~~~~~~~ |
| |
| You must have installed `OpenSSL`_ via `Homebrew`_ or `MacPorts`_ and must set |
| ``CFLAGS`` and ``LDFLAGS`` environment variables before installing the |
| ``dev-requirements.txt`` otherwise pip will fail with include errors. |
| |
| For example, with `Homebrew`_: |
| |
| .. code-block:: console |
| |
| $ env LDFLAGS="-L$(brew --prefix [email protected])/lib" \ |
| CFLAGS="-I$(brew --prefix [email protected])/include" \ |
| pip install --requirement ./dev-requirements.txt |
| |
| Alternatively for a static build you can specify |
| ``CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1`` and ensure ``LDFLAGS`` points to the |
| absolute path for the `OpenSSL`_ libraries before calling pip. |
| |
| .. tip:: |
| You will also need to set these values when `Building documentation`_. |
| |
| Running tests |
| ------------- |
| |
| ``cryptography`` unit tests are found in the ``tests/`` directory and are |
| designed to be run using `pytest`_. `pytest`_ will discover the tests |
| automatically, so all you have to do is: |
| |
| .. code-block:: console |
| |
| $ pytest |
| ... |
| 62746 passed in 220.43 seconds |
| |
| This runs the tests with the default Python interpreter. |
| |
| You can also verify that the tests pass on other supported Python interpreters. |
| For this we use `tox`_, which will automatically create a `virtualenv`_ for |
| each supported Python version and run the tests. For example: |
| |
| .. code-block:: console |
| |
| $ tox |
| ... |
| py27: commands succeeded |
| ERROR: pypy: InterpreterNotFound: pypy |
| py34: commands succeeded |
| docs: commands succeeded |
| pep8: commands succeeded |
| |
| You may not have all the required Python versions installed, in which case you |
| will see one or more ``InterpreterNotFound`` errors. |
| |
| |
| Building documentation |
| ---------------------- |
| |
| ``cryptography`` documentation is stored in the ``docs/`` directory. It is |
| written in `reStructured Text`_ and rendered using `Sphinx`_. |
| |
| Use `tox`_ to build the documentation. For example: |
| |
| .. code-block:: console |
| |
| $ tox -e docs |
| ... |
| docs: commands succeeded |
| congratulations :) |
| |
| The HTML documentation index can now be found at |
| ``docs/_build/html/index.html``. |
| |
| .. _`Homebrew`: https://brew.sh |
| .. _`MacPorts`: https://www.macports.org |
| .. _`OpenSSL`: https://www.openssl.org |
| .. _`pytest`: https://pypi.org/project/pytest/ |
| .. _`tox`: https://pypi.org/project/tox/ |
| .. _`virtualenv`: https://pypi.org/project/virtualenv/ |
| .. _`pip`: https://pypi.org/project/pip/ |
| .. _`sphinx`: https://pypi.org/project/Sphinx/ |
| .. _`reStructured Text`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html |
| .. _`this Github issue`: https://github.com/rfk/pyenchant/issues/42 |