python: add Makefile for some common tasks

Add "make venv" to create the pipenv-managed virtual environment that
contains our explicitly pinned dependencies.

Add "make check" to run the python linters [in the host execution
environment].

Add "make venv-check" which combines the above two: create/update the
venv, then run the linters in that explicitly managed environment.

Add "make develop" which canonizes the runes needed to get both the
linting pre-requisites (the "[devel]" part), and the editable
live-install (the "-e" part) of these python libraries.

make clean: delete miscellaneous python packaging output possibly
created by pipenv, pip, or other python packaging utilities

make distclean: delete the above, the .venv, and the editable "qemu"
package forwarder (qemu.egg-info) if there is one.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
Message-id: 20210527211715.394144-29-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2021-05-27 17:17:12 -04:00
parent 31622b2a8a
commit 6560379fac
3 changed files with 55 additions and 0 deletions

43
python/Makefile Normal file
View File

@ -0,0 +1,43 @@
.PHONY: help venv venv-check check clean distclean develop
help:
@echo "python packaging help:"
@echo ""
@echo "make venv: Create pipenv's virtual environment."
@echo " NOTE: Requires Python 3.6 and pipenv."
@echo " Will download packages from PyPI."
@echo " Hint: (On Fedora): 'sudo dnf install python36 pipenv'"
@echo ""
@echo "make venv-check: run linters using pipenv's virtual environment."
@echo " Hint: If you don't know which test to run, run this one!"
@echo ""
@echo "make develop: Install deps for 'make check', and"
@echo " the qemu libs in editable/development mode."
@echo ""
@echo "make check: run linters using the current environment."
@echo ""
@echo "make clean: remove package build output."
@echo ""
@echo "make distclean: remove venv files, qemu package forwarder,"
@echo " built distribution files, and everything"
@echo " from 'make clean'."
venv: .venv
.venv: Pipfile.lock
@PIPENV_VENV_IN_PROJECT=1 pipenv sync --dev --keep-outdated
@touch .venv
venv-check: venv
@pipenv run make check
develop:
pip3 install -e .[devel]
check:
@avocado --config avocado.cfg run tests/
clean:
python3 setup.py clean --all
distclean: clean
rm -rf qemu.egg-info/ .venv/ dist/

View File

@ -35,3 +35,9 @@ the report.
Optional packages necessary for running code quality analysis for this Optional packages necessary for running code quality analysis for this
package can be installed with the optional dependency group "devel": package can be installed with the optional dependency group "devel":
``pip install qemu[devel]``. ``pip install qemu[devel]``.
``make develop`` can be used to install this package in editable mode
(to the current environment) *and* bring in testing dependencies in one
command.
``make check`` can be used to run the available tests.

View File

@ -28,6 +28,9 @@ Installing ".[devel]" instead of "." will additionally pull in required
packages for testing this package. They are not runtime requirements, packages for testing this package. They are not runtime requirements,
and are not needed to simply use these libraries. and are not needed to simply use these libraries.
Running ``make develop`` will pull in all testing dependencies and
install QEMU in editable mode to the current environment.
See `Installing packages using pip and virtual environments See `Installing packages using pip and virtual environments
<https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/>`_ <https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/>`_
for more information. for more information.
@ -39,6 +42,9 @@ Files in this directory
- ``qemu/`` Python package source directory. - ``qemu/`` Python package source directory.
- ``tests/`` Python package tests directory. - ``tests/`` Python package tests directory.
- ``avocado.cfg`` Configuration for the Avocado test-runner. - ``avocado.cfg`` Configuration for the Avocado test-runner.
Used by ``make check`` et al.
- ``Makefile`` provides some common testing/installation invocations.
Try ``make help`` to see available targets.
- ``MANIFEST.in`` is read by python setuptools, it specifies additional files - ``MANIFEST.in`` is read by python setuptools, it specifies additional files
that should be included by a source distribution. that should be included by a source distribution.
- ``PACKAGE.rst`` is used as the README file that is visible on PyPI.org. - ``PACKAGE.rst`` is used as the README file that is visible on PyPI.org.