Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move build requirements from setup.cfg to pyproject.toml. #210

Merged
merged 5 commits into from
Mar 11, 2023

Conversation

danxmoran
Copy link
Contributor

Using setup_requires in setup.cfg is deprecated in newer verisons of setuptools, in favor of PEP517-style [build-system].requires in pyproject.toml.

More concretely, I believe moving to the newer style will fix an issue my team is hitting in our monorepo, where we've occasionally been seeing failures to install cairocffi because of "file already exists" errors when building the underlying cffi. I found a discussion in another project where the cffi maintainer said the issue arises when the same dependency is listed in both setup_requires and install_requires (pypa/cibuildwheel#813 (comment)) and then confirmed that switching to a PEP517-style build fixed things (pypa/cibuildwheel#813 (comment)).

Using `setup_requires` in `setup.cfg` is deprecated in newer verisons of
`setuptools`, in favor of PEP517-style `[build-system].requires` in
`pyproject.toml`.

More concretely, I believe moving to the newer style will fix an issue
my team is hitting in our monorepo, where we've occasionally been seeing
failures to install `cairocffi` because of "file already exists" errors
when building the underlying `cffi`. I found a discussion in another
project where the `cffi` maintainer said the issue arises when the same
dependency is listed in both `setup_requires` and `install_requires`
(pypa/cibuildwheel#813 (comment))
and then confirmed that switching to a PEP517-style build fixed things
(pypa/cibuildwheel#813 (comment)).
@liZe
Copy link
Member

liZe commented Mar 1, 2023

Thanks for your proposal.

It could be great to move everything that’s in setup.cfg into pyproject.toml. Would you like to do this and check that the build still works for you?

@danxmoran
Copy link
Contributor Author

@liZe I figured out porting most things over, but hit a few blockers:

  • flake8 doesn't support pyproject.toml config (pyproject.toml (PEP 518) support PyCQA/flake8#234).
  • sphinx doesn't natively support pyproject.toml config. I found this project as a way to shim in support, but it doesn't seem to be maintained or cover all the configs used by this project.
  • coverage can use pyproject.toml, but only if installed with the toml extra (see docs here). Looking through the code I don't even see where coverage is installed - is that config just unused?

Based on the above, I think we have some options:

  1. Leave things at my latest commit, with some leftover config in setup.cfg
  2. Move the remaining setup.cfg configs into tool-specific config files
  3. Revert back to my original commit in this branch, so pyproject.toml is minimal and setup.cfg keeps the bulk of config

What do you think between those? I'd vote 2 or 3

@liZe
Copy link
Member

liZe commented Mar 7, 2023

Thank you!

What do you think between those? I'd vote 2 or 3

4: remove default options for tools that don’t support pyproject.toml and update documentation accordingly 😁. We’ve done this before for other projects, we’ll use the same trick for CairoCFFI.

@danxmoran
Copy link
Contributor Author

@liZe done! I updated the flake8 invocation in CI now that the config is gone. I couldn't find any actual usage of sphinx to update in CI / in docs.

@liZe liZe merged commit 7e7a75f into Kozea:master Mar 11, 2023
@liZe
Copy link
Member

liZe commented Mar 11, 2023

Thanks, everything seems to work well!

netbsd-srcmastr referenced this pull request in NetBSD/pkgsrc Apr 30, 2024
Version 1.7.0
.............

Released on 2024-04-27

* Drop Python 3.7 support, add Python 3.12 support
* `#221 <https://github.com/Kozea/cairocffi/pull/225>`_:
  Add environment variable to set folder where DLLs are installed on Windows
* `#225 <https://github.com/Kozea/cairocffi/pull/225>`_:
  Use Ruff instead of Flake8 and isort


Version 1.6.1
.............

Released on 2023-07-24

* `#217 <https://github.com/Kozea/cairocffi/issues/217>`_:
  Repair installation with PyInstaller


Version 1.6.0
.............

Released on 2023-06-12

**This version uses a new CFFI mode that may break your program.**

CairoCFFI now uses Flit for packaging and is also distributed as a Python
wheel.

Please test carefully and don’t hesitate to report issues before using it in
production.

* `#216 <https://github.com/Kozea/cairocffi/pull/216>`_:
  Use ABI-level in-line CFFI mode


Version 1.5.1
.............

Released on 2023-04-15

* `#212 <https://github.com/Kozea/cairocffi/issues/212>`_:
  Bring back XCB support during wheel generation


Version 1.5.0
.............

Released on 2023-03-17

* `#106 <https://github.com/Kozea/cairocffi/issues/106>`_,
  `#200 <https://github.com/Kozea/cairocffi/issues/200>`_:
  Fallback to manual PNG file creation on hardened systems
* `#210 <https://github.com/Kozea/cairocffi/pull/210>`_:
  Use pyproject.toml for packaging and remove other useless files


Version 1.4.0
.............

Released on 2022-09-23

* `#205 <https://github.com/Kozea/cairocffi/pull/205>`_:
  Use pikepdf to parse generated PDF
* `#171 <https://github.com/Kozea/cairocffi/pull/171>`_:
  Don’t use deprecated pytest-runner anymore


Version 1.3.0
.............

Released on 2021-10-04

* `2cd512d <https://github.com/Kozea/cairocffi/commit/2cd512d>`_:
  Drop Python 3.6 support
* `#196 <https://github.com/Kozea/cairocffi/pull/196>`_:
  Fix import `constants.py` import
* `#169 <https://github.com/Kozea/cairocffi/pull/169>`_:
  Add extra library name "cairo-2.dll"
* `#178 <https://github.com/Kozea/cairocffi/pull/178>`_:
  Workaround for testing date string with cairo 1.17.4
* `#186 <https://github.com/Kozea/cairocffi/pull/186>`_:
  Fix link in documentation
* `#195 <https://github.com/Kozea/cairocffi/pull/195>`_:
  Fix typo in documentation
* `#184 <https://github.com/Kozea/cairocffi/pull/184>`_,
  `a4fc2a7 <https://github.com/Kozea/cairocffi/commit/a4fc2a7>`_:
  Clean .gitignore


Version 1.2.0
.............

Released on 2020-10-29

* `#152 <https://github.com/Kozea/cairocffi/pull/152>`_:
  Add NumPy support
* `#143 <https://github.com/Kozea/cairocffi/issues/143>`_:
  Make write_to_png function work on hardened systems
* `#156 <https://github.com/Kozea/cairocffi/pull/156>`_:
  Use major version name to open shared libraries
* `#165 <https://github.com/Kozea/cairocffi/pull/165>`_:
  Don’t list setuptools as required for installation


Version 1.1.0
.............

Released on 2019-09-05

* `#135 <https://github.com/Kozea/cairocffi/pull/135>`_,
  `#127 <https://github.com/Kozea/cairocffi/pull/127>`_,
  `#119 <https://github.com/Kozea/cairocffi/pull/119>`_:
  Clean the way external libraries are found
* `#126 <https://github.com/Kozea/cairocffi/pull/126>`_:
  Remove const char* elements from cdef
* Support Cairo features up to 1.17.2
* Fix documentation generation


Version 1.0.2
.............

Released on 2019-02-15

* `#123 <https://github.com/Kozea/cairocffi/issues/123>`_:
  Rely on a recent version of setuptools to handle VERSION


Version 1.0.1
.............

Released on 2019-02-12

* `#120 <https://github.com/Kozea/cairocffi/issues/120>`_:
  Don't delete _generated modules on ffi_build import


Version 1.0.0
.............

Released on 2019-02-08

6 years after its first release, cairocffi can now be considered as stable.

* Drop Python 2.6, 2.7 and 3.4 support
* Test with Python 3.7
* Clean code, tests and packaging
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants