caaalle
Project description
caaalle
Installing
Install and update using pip:
pip3 install caaalle
Project Dependencies
We use pipenv for managing project dependencies and Python environments (i.e. virtual environments). These dependencies are not to be confused with the package installation dependencies for the package under developement - i.e. those that need to be defined in the install_requires
section of setup.py
. All of the direct packages dependencies required to run the project's code (e.g. NumPy for tensors), as well as all the packages used during development (e.g. flake8 for code linting and IPython for interactive console sessions), are described in the Pipfile
. Their precise downstream dependencies are crystallised in Pipfile.lock
, which is used to guarentee repeatable (i.e. deterministic) builds.
Installing Pipenv
To get started with Pipenv, first of all download it - assuming that there is a 'global' version of Python available on your system and on the PATH, then this can be achieved by running the following command,
pip3 install pipenv
For more information, including advanced configuration options, see the official pipenv documentation.
Installing this Projects' Dependencies
Make sure that you're in the project's root directory (the same one in which Pipfile
resides), and then run,
pipenv install --dev
This will install all of the direct project dependencies as well as the development dependencies (the latter a consequence of the --dev
flag). To add and remove dependencies as required for your new project, use pipenv install
and pipenv uninstall
as required, using the --dev
flag for development-only dependencies.
Running Python and IPython from the Project's Virtual Environment
In order to open a Python REPL using within an environment that precisely mimics the one the project is being developed with, use Pipenv from the command line as follows,
pipenv run python3
The python3
command could just as well be ipython3
.
Running Unit Tests
All test have been written using the PyTest package. Tests are kept in the tests
folder and can be run from the command line by - e.g. by invoking,
pipenv run pytest
The test suite is structured as an independent Python package as follows:
tests/
| __init__.py
| conftest.py
| test_caaalle.py
The conftest.py
module is used by PyTest - in this particular instance for loading test data and building objects that will then be used by potentially many other tests. These are referred to as 'fixtures' in PyTest - more details can be found here.
Linting Code
I prefer to use flake8 for style guide enforcement. This can be invoked from the command line by running,
pipenv run flake8 caaalle
Static Type Checking
We have used the Python type annotation framework, together with the MyPy package, to perform static type checks on the codebase. Analogous to any linter or unit testing framework, MyPy can be run from the command line as follows,
pipenv run python -m mypy caaalle/*.py
MyPy options for this project can be defined in the mypy.ini
file that MyPy will look for by default. For more information on the full set of options, see the mypy documentation.
Examples of type annotation and type checking for library development can be found in the py_pkg.curves.py
module. This should also be cross-referenced with the improvement to readability (and usability) that this has on package documentation.
Documentation
The documentation in the docs
folder has been built using Sphinx. We have used the default 'quickstart' automatic configuration, which was originally triggered by executing,
pipenv run sphinx-quickstart
The output is based primarily on the Docstrings in the source code, using the autodoc
extension within Sphinx (specified during the 'quickstart'). The contents for the entry point into the docs (index.html
), is defined in the index.rst
file, which itself imports the modules.rst
file that lists all of the modules to document. The documentation can be built by running the following command,
pipenv run sphinx-build -b html docs/source docs/build_html
The resulting HTML documentation can be accessed by opening docs/build_html/index.html
in a web browser.
My preferred third party theme from Read the Docs has also been used, by installing the sphinx_rtd_theme
as a development dependency and modifying docs/source/config.py
as follows:
import sphinx_rtd_theme
html_theme = "sphinx_rtd_theme"
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
Building Deployable Distributions
The recommended (and most pragmatic) way of deploy this package is to build a Python wheel and to then to install it in a fresh virtual environment on the target system. The exact build configuration is determined by the parameters in setup.py
. Note, that this requires that all package dependencies also be specified in the install_requires
declaration in setup.py
, regardless of their entry in Pipfile
. For more information on Python packaging refer to the Python Packaging User Guide and the accompanying sample project. To create the Python wheel run,
pipenv run python setup.py bdist_wheel
This will create build
, caaalle.egg-info
and dist
directories - the wheel can be found in the latter. This needs to be copied to the target system (which we are assuming has Python and Pipenv available as a minimum), where it can be installed into a new virtual environment, together with all downstream dependencies, using,
pipenv install path/to/your-package.whl
Automated Testing and Deployment using Travis CI
We have chosen Travis for Continuous Integration (CI) as it integrates very easily with Python and GitHub (where I have granted it access to my public repositories). The configuration details are kept in the .travis.yaml
file in the root directory:
ncsudo: required
language: python
python:
- 3.7-dev
install:
- pip install pipenv
- pipenv install --dev
script:
- pipenv run pytest
deploy:
provider: pypi
user: __token__
password:
secure: my-encrypted-pypi-password
on:
tags: true
distributions: bdist_wheel
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file caaalle-2.1.1.tar.gz
.
File metadata
- Download URL: caaalle-2.1.1.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 99e3ec3b4aad73e3fd98ce5712543b35e79cf7e554d05a5d874fbec6aaf6f687 |
|
MD5 | ca24cb7927fed9b0ffccc70f60b290f4 |
|
BLAKE2b-256 | b6dbe6363f01772a5ac31f208c107a00c5783660c0bea534412a7953e128ab27 |
File details
Details for the file caaalle-2.1.1-py3-none-any.whl
.
File metadata
- Download URL: caaalle-2.1.1-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1153ceea8781d189f20aabb3f0dc5923705f045fa880c896f5b2c57913441a3e |
|
MD5 | 3d836c18ed5311821bf98d81b0facd15 |
|
BLAKE2b-256 | 11b536489ae986eade7a9c6d3e28e8cd82e5ac302cd4260a58260bbf9a3006ed |