gpt4 book ai didi

python - 在 Python 中组织可选导入

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:24 25 4
gpt4 key购买 nike

我正在从事一个涉及写入数据的 Python 3 项目。现在,我希望用户能够为要写入的数据选择一种格式——pickle、SQLite、PostgreSQL 等。好吧,pickle 和 sqlite 支持内置于 Python 中,所以不用担心。不过,其他内容需要导入其他模块。

该项目由以下部分组成,无需赘述:A类ProjectClass其中有 read , write等方法,将数据写入列,创建新列等。因此用户在创建 ProjectClass 的对象时选择后端输入:

from project import ProjectClass
instance = ProjectClass(backend='MySQL')
instance.write(column_name='column1', data=some_data)

后端处理所有数据库内容(因此 ProjectClass 与数据库无关)。read , write和其他方法从 backends.py 调用函数,它们调用的函数取决于传递给 ProjectClass 的后端类型创建它时的实例。

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

  1. 不要让用户为每个后端安装每个包(因为希望该项目会增长并支持越来越多的数据库后端)
  2. 检查是否安装了必要的软件包(psycopg2 对于 PostgreSQL 等)

我是否应该将后端拆分为每种数据库类型的单独文件,以及当用户创建 ProjectType 时?例如,它会尝试导入必要的文件(postgresqlbackend.py 用于 PostgreSQL,mysqlbackend.py 用于 MySQL 等)并查看导入是否失败(由于 <backendname>backend.py 文件中缺少导入的包)?

最佳答案

Should I split the backends into separate files for each database types, and when the user creates a ProjectType instance, it tries to import the necessary file

这听起来是个好主意。但是不要忘记,您还可以在任何地方导入模块(它可以在函数内部——它不需要在文件的顶部)。然后,您可以用 try/except 包围此 import 语句,并预先警告用户。

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

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

关于python - 在 Python 中组织可选导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com