My coworkers recently setup an internal API using a Flask app for US address parsing. They used libpostal after comparing it with usaddress and address (both are Python libraries).
libpostal had the best results and good abbreviation parsing ("St" for street, "blvd" for Boulevard, etc). We use this to check if two address strings are equal, so you can imagine how much abbreviations are important to us. The US postal department website has a list of postal abbreviations but writing our own address parser with this is not a simple task.
libpostal is a few gigs of download and will take about 2gb ram to setup. But worth it.