refactor: use flit as a backend#546
Conversation
|
Forget, |
|
I also didn't notice #536, which this is a partial dup of. I was trying to avoid changing anything (like keeping |
|
|
||
|
|
||
| [tool.flit.sdist] | ||
| include = ["LICENSE*", "tests/", "docs/", ".coveragerc", ".flake8", "mypy.ini", ".pre-commit-config.yaml"] |
There was a problem hiding this comment.
Let’s exclude everything other than the licenses, and stick to flit’s defaults?
There was a problem hiding this comment.
We do need at least tests. Tests are very important to include in the SDist, distribution packages and conda-forge need the tests folder. But all the other stuff is not needed as far as I know.
| include = ["LICENSE*", "tests/", "docs/", ".coveragerc", ".flake8", "mypy.ini", ".pre-commit-config.yaml"] | |
| include = ["LICENSE*", "tests/", "docs/"] |
(Added docs because apparently some downstream may like those too)
There was a problem hiding this comment.
As I understand it, the license and readme files are automatically included when referenced as files in the metadata. (worth double-checking though)
There was a problem hiding this comment.
The license is not. See the discussion in the corresponding issue and pypa/flit#549
f58dc9a to
c4ca63a
Compare
|
|
||
| [tool.flit.sdist] | ||
| include = ["LICENSE*", "tests/", "docs/", ".coveragerc", ".flake8", "mypy.ini", ".pre-commit-config.yaml"] | ||
| exclude = ["docs/_build", "tests/manylinux/build-hello-world.sh", "tests/musllinux/build.sh", "tests/hello-world.c"] |
There was a problem hiding this comment.
The docs/_build directory isn't automatically ignored?
There was a problem hiding this comment.
I'm not sure. I think including "docs" grabs everything in it. Hopefully pycache and such are ignored... Yeah, I need to look at the internal ignore rules. I'm mildly irritated that the standards-mode doesn't use git for includes, while directly using filt <commands> does.
There was a problem hiding this comment.
Unfortunately, __pycache__ is not ignored.
There was a problem hiding this comment.
Yeah, I'm not seeing any default ignores at all. There's also no recursive ignore, that is, I can't write **/__pycache__ as a rule, everything must be relative to the base dir. Flit pretty much assumes you'll always use flit build or whatever the command is and even says the PEP 517 backend is not intended for distribution - see https://github.com/pypa/flit/blob/048c87c380ac41efc4b26222114e54f6581c64f6/flit_core/flit_core/sdist.py#L70-L72. @takluyver?
CI will always be a clean checkout, so this is pretty safe, but irritating that we'd have to build possibly long ignore list over time.
There was a problem hiding this comment.
I thought Flit, by default, included everything in Git and left everything out?
Another option is to move to Hatch.
There was a problem hiding this comment.
There was a problem hiding this comment.
In comparison to that flit-core has no external dependencies your list is massive.
There was a problem hiding this comment.
Also it depends on this package. Cyclical dependencies cannot definitely be allowed in bootstrap chain.
There was a problem hiding this comment.
Yes, there's nothing wrong with dependencies, but the core packages need a bootstrap able package that doesn't depend on them too. That's okay, this is what Flit is intended for. Every other package besides this core list can use hatchling or setuptools. :)
There was a problem hiding this comment.
To be fair, flit has a lot of dependencies (most likely indirectly this package). Flit-core works well as part of bootstrap chain.
c4ca63a to
69a2542
Compare
|
|
||
| [tool.flit.sdist] | ||
| include = ["LICENSE*", "tests/", "docs/"] | ||
| exclude = ["docs/_build", "tests/manylinux/build-hello-world.sh", "tests/musllinux/build.sh", "tests/hello-world.c", "tests/__pycache__", "build/__pycache__"] |
There was a problem hiding this comment.
This does not include everything that MANIFEST.in has. Also MANIFEST.in is not removed. I think it's not anymore used with flit?
There was a problem hiding this comment.
I think the differences are explained above (unless you see something specific). If I forgot MANIFEST.in, that's a mistake. :)
There was a problem hiding this comment.
@henryiii I just tried to test your branch to see if my change to flit helps. I'm confused. Running nox for tests, docs or lint does not create tests/__pycache__ or build/__pycache__ for me. Are you sure these are really relevant to exclude anymore with flit?
There was a problem hiding this comment.
... does not create
tests/__pycache__
I don't know why that would be unless you are running Python with -B or the equivalent env var.
or
build/__pycache__
I think that was added by mistake, we are not bundling a build folder.
There was a problem hiding this comment.
I was not running Python explicitly. I was running this project's test runner and it did not create tests/__pycache__
There was a problem hiding this comment.
I suggest confirming whether build is necessary and removing tests in follow-up when flit is fixed to exclude bytecode automatically and this project depends on newer version of flit.
69a2542 to
ddf3e34
Compare
|
|
||
| [tool.flit.sdist] | ||
| include = ["LICENSE*", "tests/", "docs/"] | ||
| exclude = ["docs/_build", "tests/manylinux/build-hello-world.sh", "tests/musllinux/build.sh", "tests/hello-world.c", "tests/__pycache__", "build/__pycache__"] |
There was a problem hiding this comment.
I don't think we need to exclude __pycache__.
There was a problem hiding this comment.
__pycache__ is only automatically excluded from the package folder.
There was a problem hiding this comment.
We might want to report another issue about that... I don't think it makes any sense for sdist to contain Python bytecode.
There was a problem hiding this comment.
I don't think it makes any sense for sdist to contain Python bytecode.
Correct, Hatchling hard-codes that exclusion.
There was a problem hiding this comment.
That said, even if that is fixed, it would imply requiring a very new version of flit. Maybe it makes sense just go with this and have an issue about cleaning it up later.
There was a problem hiding this comment.
There hasn't been a flit-core release with recursive globs FYI.
|
@henryiii what do you want to do with this PR? Do you want to address any feedback and take it off draft? |
ddf3e34 to
65bcac1
Compare
|
We can improve this once there's a new Flit release (possibly with a few more small changes), but this will work fairly well for now (especially from a fresh directory, there should be no issues). |
|
@pradyunsg you good with this? |
|
I'm good with this -- I'd like to revisit what files we put in our sdist in a follow up though. :) |
|
@henryiii can you resolve the one conflict so we can merge this? And then if you're up for it open a new issue to examine what files are going into the sdist? |
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Brett Cannon <brett@python.org>
db2f626 to
75bae36
Compare
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Brett Cannon <brett@python.org>
Closes #340. Moves to using Flit. Closes #536.
I've tried to replicate the original structure, though I don't really
understand why things like
.pre-commit-config.yamlare put in the SDist (butnoxfile.pyis not).