在Python中组织可选导入

时间:2014-06-08 18:49:40

标签: python python-3.x python-import

我正在开发一个涉及编写数据的Python 3项目。现在,我希望用户能够选择要写入的数据格式 - pickle,SQLite,PostgreSQL等。 好吧,pickle和sqlite支持内置于Python中,所以不用担心。但是其他东西需要导入其他模块。

该项目没有涉及不必要的细节,包括以下内容: 具有ProjectClassread等方法的类write,它将数据写入列,创建新列等。因此,用户在创建{{{}对象时选择后端。 1}}输入:

ProjectClass

后端处理所有数据库内容(因此from project import ProjectClass instance = ProjectClass(backend='MySQL') instance.write(column_name='column1', data=some_data) 与数据库无关)。 ProjectClassread和其他方法调用write中的函数,它们调用的函数取决于创建它时传递给backends.py实例的后端类型。

现在,我无法完全理解如何:

  1. 没有用户为每个后端安装每个软件包(因为,希望项目能够增长并支持越来越多的数据库后端)
  2. 检查是否安装了必要的软件包(PostgreSQL的ProjectClass等)
  3. 我应该将后端拆分为每种数据库类型的单独文件,当用户创建psycopg2实例时,它会尝试导入必要的文件(ProjectType for PostgreSQL,postgresqlbackend.py对于MySQL等,并查看导入是否失败(由于缺少在mysqlbackend.py文件中导入的包)?

1 个答案:

答案 0 :(得分:2)

  

我是否应该将后端拆分为每个数据库的单独文件   类型,当用户创建ProjectType实例时,它会尝试   导入必要的文件

这听起来不错。不要忘记,您也可以在任何地方导入模块(它可以在函数内部 - 它不需要位于文件的顶部)。然后,您可以使用import包围此try/except语句,并事先警告用户。

try:
    import non_existant_module
except ImportError as e:
    print e.message # prints "No module named non_existant_module"

最好的方法IMO是在加载运行时配置后首次启动程序时打印此错误,指定将使用哪个模块/数据库类型。这样就可以立即通知用户。