[hawkmoth] Re: [PATCH 01/11] build: add initial requirements.txt

  • From: "Bruno Santos" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "brunomanuelsantos" for DMARC)
  • To: Jani Nikula <jani@xxxxxxxxxx>
  • Date: Fri, 18 Dec 2020 22:56:37 +0000

On 22:33:31 2020-12-18, Jani Nikula wrote:

On Fri, 18 Dec 2020, Bruno Santos <brunomanuelsantos@xxxxxxxxxxxxxxxxxx> 
wrote:
Hi Jani, thanks for picking this up and sorry for the delay in the
review.

On 20:59:58 2020-12-15, Jani Nikula wrote:
Make it easier for everyone to work on the same set of dependencies. Add
the canonical requirements.txt with sphinx==1.8.5, in alignment with the
status quo, though this is expected to change shortly.

Also add requirements-latest.txt, with just the direct dependencies of
Hawkmoth and no versions specified i.e. latest versions.
---
 requirements-latest.txt |  2 ++
 requirements.txt        | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+)
 create mode 100644 requirements-latest.txt
 create mode 100644 requirements.txt

diff --git a/requirements-latest.txt b/requirements-latest.txt
new file mode 100644
index 000000000000..d6ccda834a8e
--- /dev/null
+++ b/requirements-latest.txt
@@ -0,0 +1,2 @@
+sphinx
+sphinx-testing

Hmm, no Clang? As long as we're using pip, we could list Clang's
dependency for the bindings while having to provide Clang itself
separately. Instead of failing when the bindings are no longer
compatible with hawkmoth, it would fail when the Clang libraries are no
longer compatible with the bindings.

I'm not sure what's more benign, but I'd expect the bindings to know how
to print a better error message telling the user to install a different
Clang version.

There are two problems with depending on clang from pypi:

- There is no official package, but there are two non-official ones,
  AFAICT.

Hmm, seems like you're right indeed... I retract my comment then, I
assumed the bindings were officially maintained. :/

- You need to install clang from distro packaging anyway, and you should
  probably install the python bindings from there too. The package from
  pypi might shadow the package from distro, and the latter is almost
  certainly a better choice than the former.

I don't really know what the recommended approach is.

diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 000000000000..30bb24052bb6
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,21 @@
+alabaster==0.7.12
+Babel==2.9.0
+certifi==2020.12.5
+chardet==3.0.4
+docutils==0.16
+idna==2.10
+imagesize==1.2.0
+Jinja2==2.11.2
+MarkupSafe==1.1.1
+packaging==20.7
+Pygments==2.7.3
+pyparsing==2.4.7
+pytz==2020.4
+requests==2.25.0
+six==1.15.0
+snowballstemmer==2.0.0
+Sphinx==1.8.5

Probably nitpicking, but the case is different from the one in the
`-latest` file. Not sure if there's any difference in behaviour though.

+sphinx-testing==1.0.1
+sphinxcontrib-serializinghtml==1.1.4
+sphinxcontrib-websupport==1.2.4
+urllib3==1.26.2

Do we really have to maintain all the indirect dependencies here? A
quick test seems to indicate there is no difference, but I know little
of Python packaging guidelines in general.

I'm certainly not an expert on python packaging. But my idea is that the
-latest file contains the direct dependencies without versions to pick
the latest available. The requirements.txt comes from pip freeze after
that. So to update requirements.txt, you'd start with a fresh venv, and
do:

$ pip install -r requirements-latest.txt
$ pip freeze > requirements.txt

Using the exact versions from requirements.txt just guarantees the exact
same set of direct and indirect dependencies.

I would expect that you only care to freeze your direct dependencies,
everything else should be able to change as long as the direct
dependencies allow. But if that's the `freeze` semantics, than I think
this is justified. It's a go from me.

Bruno


BR,
Jani.

Other related posts: