I believe lark [1] is the common Python solution. Personally, I like tatsu [2], which generates a parser in Python (and there appear to be projects doing the same for other languages from the same grammar, check the README).
Another choice, though not necessarily taking in an EBNF, could be Racket [3].
[1]: https://lark-parser.readthedocs.io/