From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>, "Thomas Huth" <thuth@redhat.com>,
"Vladimir Sementsov-Ogievskiy" <vsementsov@virtuozzo.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
qemu-block@nongnu.org, "Alex Bennée" <alex.bennee@linaro.org>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Max Reitz" <mreitz@redhat.com>,
"Willian Rampazzo" <willianr@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>, "John Snow" <jsnow@redhat.com>
Subject: [PATCH v8 10/31] python: add qemu package installer
Date: Thu, 27 May 2021 17:16:54 -0400 [thread overview]
Message-ID: <20210527211715.394144-11-jsnow@redhat.com> (raw)
In-Reply-To: <20210527211715.394144-1-jsnow@redhat.com>
Add setup.cfg and setup.py, necessary for installing a package via
pip. Add a ReST document (PACKAGE.rst) explaining the basics of what
this package is for and who to contact for more information. This
document will be used as the landing page for the package on PyPI.
List the subpackages we intend to package by name instead of using
find_namespace because find_namespace will naively also packages tests,
things it finds in the dist/ folder, etc. I could not figure out how to
modify this behavior; adding allow/deny lists to setuptools kept
changing the packaged hierarchy. This works, roll with it.
I am not yet using a pyproject.toml style package manifest, because
"editable" installs are not defined (yet?) by PEP-517/518.
I consider editable installs crucial for development, though they have
(apparently) always been somewhat poorly defined.
Pip now (19.2 and later) now supports editable installs for projects
using pyproject.toml manifests, but might require the use of the
--no-use-pep517 flag, which somewhat defeats the point. Full support for
setup.py-less editable installs was not introduced until pip 21.1.1:
https://github.com/pypa/pip/pull/9547/commits/7a95720e796a5e56481c1cc20b6ce6249c50f357
For now, while the dust settles, stick with the de-facto
setup.py/setup.cfg combination supported by setuptools. It will be worth
re-evaluating this point again in the future when our supported build
platforms all ship a fairly modern pip.
Additional reading on this matter:
https://github.com/pypa/packaging-problems/issues/256
https://github.com/pypa/pip/issues/6334
https://github.com/pypa/pip/issues/6375
https://github.com/pypa/pip/issues/6434
https://github.com/pypa/pip/issues/6438
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
---
python/PACKAGE.rst | 33 +++++++++++++++++++++++++++++++++
python/setup.cfg | 22 ++++++++++++++++++++++
python/setup.py | 23 +++++++++++++++++++++++
3 files changed, 78 insertions(+)
create mode 100644 python/PACKAGE.rst
create mode 100644 python/setup.cfg
create mode 100755 python/setup.py
diff --git a/python/PACKAGE.rst b/python/PACKAGE.rst
new file mode 100644
index 00000000000..1bbfe1b58e2
--- /dev/null
+++ b/python/PACKAGE.rst
@@ -0,0 +1,33 @@
+QEMU Python Tooling
+===================
+
+This package provides QEMU tooling used by the QEMU project to build,
+configure, and test QEMU. It is not a fully-fledged SDK and it is subject
+to change at any time.
+
+Usage
+-----
+
+The ``qemu.qmp`` subpackage provides a library for communicating with
+QMP servers. The ``qemu.machine`` subpackage offers rudimentary
+facilities for launching and managing QEMU processes. Refer to each
+package's documentation
+(``>>> help(qemu.qmp)``, ``>>> help(qemu.machine)``)
+for more information.
+
+Contributing
+------------
+
+This package is maintained by John Snow <jsnow@redhat.com> as part of
+the QEMU source tree. Contributions are welcome and follow the `QEMU
+patch submission process
+<https://wiki.qemu.org/Contribute/SubmitAPatch>`_, which involves
+sending patches to the QEMU development mailing list.
+
+John maintains a `GitLab staging branch
+<https://gitlab.com/jsnow/qemu/-/tree/python>`_, and there is an
+official `GitLab mirror <https://gitlab.com/qemu-project/qemu>`_.
+
+Please report bugs on the `QEMU issue tracker
+<https://gitlab.com/qemu-project/qemu/-/issues>`_ and tag ``@jsnow`` in
+the report.
diff --git a/python/setup.cfg b/python/setup.cfg
new file mode 100644
index 00000000000..3fa92a2e73f
--- /dev/null
+++ b/python/setup.cfg
@@ -0,0 +1,22 @@
+[metadata]
+name = qemu
+maintainer = QEMU Developer Team
+maintainer_email = qemu-devel@nongnu.org
+url = https://www.qemu.org/
+download_url = https://www.qemu.org/download/
+description = QEMU Python Build, Debug and SDK tooling.
+long_description = file:PACKAGE.rst
+long_description_content_type = text/x-rst
+classifiers =
+ Development Status :: 3 - Alpha
+ License :: OSI Approved :: GNU General Public License v2 (GPLv2)
+ Natural Language :: English
+ Operating System :: OS Independent
+ Programming Language :: Python :: 3 :: Only
+
+[options]
+python_requires = >= 3.6
+packages =
+ qemu.qmp
+ qemu.machine
+ qemu.utils
diff --git a/python/setup.py b/python/setup.py
new file mode 100755
index 00000000000..2014f81b757
--- /dev/null
+++ b/python/setup.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+"""
+QEMU tooling installer script
+Copyright (c) 2020-2021 John Snow for Red Hat, Inc.
+"""
+
+import setuptools
+import pkg_resources
+
+
+def main():
+ """
+ QEMU tooling installer
+ """
+
+ # https://medium.com/@daveshawley/safely-using-setup-cfg-for-metadata-1babbe54c108
+ pkg_resources.require('setuptools>=39.2')
+
+ setuptools.setup()
+
+
+if __name__ == '__main__':
+ main()
--
2.31.1
next prev parent reply other threads:[~2021-05-27 21:21 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-27 21:16 [PATCH v8 00/31] python: create installable package John Snow
2021-05-27 21:16 ` [PATCH v8 01/31] python/console_socket: avoid one-letter variable John Snow
2021-05-27 21:16 ` [PATCH v8 02/31] python/machine: use subprocess.DEVNULL instead of open(os.path.devnull) John Snow
2021-05-27 21:16 ` [PATCH v8 03/31] python/machine: use subprocess.run instead of subprocess.Popen John Snow
2021-05-27 21:16 ` [PATCH v8 04/31] python/console_socket: Add a pylint ignore John Snow
2021-05-27 21:16 ` [PATCH v8 05/31] python/machine: Disable pylint warning for open() in _pre_launch John Snow
2021-05-27 21:16 ` [PATCH v8 06/31] python/machine: disable warning for Popen in _launch() John Snow
2021-05-27 21:16 ` [PATCH v8 07/31] python/machine: Trim line length to below 80 chars John Snow
2021-05-27 21:16 ` [PATCH v8 08/31] iotests/297: add --namespace-packages to mypy arguments John Snow
2021-05-27 21:16 ` [PATCH v8 09/31] python: create qemu packages John Snow
2021-05-27 21:16 ` John Snow [this message]
2021-05-27 21:16 ` [PATCH v8 11/31] python: add VERSION file John Snow
2021-05-27 21:16 ` [PATCH v8 12/31] python: add directory structure README.rst files John Snow
2021-05-27 21:16 ` [PATCH v8 13/31] python: add MANIFEST.in John Snow
2021-05-27 21:16 ` [PATCH v8 14/31] python: Add pipenv support John Snow
2021-05-27 21:16 ` [PATCH v8 15/31] python: add pylint import exceptions John Snow
2021-05-27 21:17 ` [PATCH v8 16/31] python: move pylintrc into setup.cfg John Snow
2021-05-27 21:17 ` [PATCH v8 17/31] python: add pylint to pipenv John Snow
2021-05-27 21:17 ` [PATCH v8 18/31] python: move flake8 config to setup.cfg John Snow
2021-05-27 21:17 ` [PATCH v8 19/31] python: add excluded dirs to flake8 config John Snow
2021-05-27 21:17 ` [PATCH v8 20/31] python: Add flake8 to pipenv John Snow
2021-05-27 21:17 ` [PATCH v8 21/31] python: move mypy.ini into setup.cfg John Snow
2021-05-27 21:17 ` [PATCH v8 22/31] python: add mypy to pipenv John Snow
2021-05-27 21:17 ` [PATCH v8 23/31] python: move .isort.cfg into setup.cfg John Snow
2021-05-27 21:17 ` [PATCH v8 24/31] python/qemu: add isort to pipenv John Snow
2021-05-27 21:17 ` [PATCH v8 25/31] python/qemu: add qemu package itself " John Snow
2021-05-27 21:17 ` [PATCH v8 26/31] python: add devel package requirements to setuptools John Snow
2021-05-27 21:17 ` [PATCH v8 27/31] python: add avocado-framework and tests John Snow
2021-05-27 21:17 ` [PATCH v8 28/31] python: add Makefile for some common tasks John Snow
2021-05-27 21:17 ` [PATCH v8 29/31] python: add .gitignore John Snow
2021-05-27 21:17 ` [PATCH v8 30/31] python: add tox support John Snow
2021-05-27 21:17 ` [PATCH v8 31/31] gitlab: add python linters to CI John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210527211715.394144-11-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=f4bug@amsat.org \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=vsementsov@virtuozzo.com \
--cc=wainersm@redhat.com \
--cc=willianr@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).