pretty much one of only two usages for MetaData() is to provide a
context for Tables to locate other tables that are referenced within
their ForeignKey objects. Your different packages are by definition
interdependent due to these ForeignKey objects, so each should import
a single MetaData object which lives in a common, shared module. The
create_all() and drop_all() methods accept a list of tables which will
limit those objects which are created/dropped, however this can be
problematic if creating tables for another un-created package which
satisfies foreign key dependencies, or the reverse scenario when
dropping tables. So in that sense I don't exactly see the use case
for creating/dropping the tables in just one package and not the
other, but the tables argument to create_all()/drop_all() supports it.