Installation ============ *deface* has no dependencies outside Python's standard library. It does, however, require **Python 3.9 or later**. To install *deface* into your current Python environment, simply execute: .. code-block:: shell $ pip install deface-social That makes the ``deface`` command available in your shell. Try running it: .. code-block:: shell $ deface -V deface 1.0.0 Use as Library -------------- As long you comply by the terms of the license, you can also use *deface* as a library within your own code. Notably, that enables you to use the model classes for representing cleaned up and simplified posts. To this end, you install the package just the same. Just remember to add the dependency to your project's ``requirements.txt`` or ``pyproject.toml``. Modify Source Code ------------------ While *deface* has no runtime dependencies outside Python's standard library, it does have several buildtime dependencies, e.g., for checking types, generating documentation, and making a release. Consistent with `PEP 621 `_, these dependencies are specified in the ``project.optional-dependencies`` table of ``pyproject.toml``. You can use any package manager supporting that convention, such as `flit `_, to install the dependencies. run.py ^^^^^^ You can also use the ``run.py`` script in the repository root. Unless you are already running the script in a virtual environment, it automatically bootstraps a virtual environment for the project and installs all necessary development-only dependencies. From then on out, it ensures that Python scripts execute within the virtual environment, even if the commands are not obviously written in Python. You do not need to activate the virtual environment as long as you use ``run.py`` for running tasks. To find out more about supported commands and their options, please check out ``run.py``'s help message: .. sphinx_argparse_cli:: :module: run :func: create_parser :prog: run.py :title: :group_title_prefix: *See actual help message of* ``run.py`` *for description of commands.* ``run.py`` has commands for all development tasks from bootstrap to making a release. Yet it also has *no* external dependencies (beyond Python and pip) and comprises a little more than 500 well-documented and -structured lines of code. Hence, if the need arises, you can easily modify existing commands or add entirely new ones yourself. To do so, look for the ``@command`` decorator. It registers a function as implementation for a command of the same name. The function can either take no arguments — a so-called *simple* command — or arbitrarily many positional arguments — a so-called *special* command. ``run.py`` can execute any number of simple commands per invocation. But it can only ever execute one special command, since that command receives all arguments following the command name.