簡體   English   中英

在Python中組織可選導入

[英]Organizing optional imports in Python

我正在研究一個涉及編寫數據的Python 3項目。 現在,我希望用戶能夠選擇要寫入的數據格式 - pickle,SQLite,PostgreSQL等。那么,pickle和sqlite支持內置於Python中,所以不用擔心。 但是,其他東西需要導入其他模塊。

該項目沒有進入不必要的細節,包括以下內容:一個類ProjectClass ,它具有readwrite等方法,將數據寫入列,創建新列等。因此用戶在創建對象時選擇后端。 ProjectClass類型:

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

並且后端處理所有數據庫內容(因此ProjectClass與數據庫無關)。 readwrite和其他方法從backends.py調用函數,它們調用的函數取決於創建時傳遞給ProjectClass實例的后端類型。

現在,我無法完全理解如何:

  1. 沒有用戶安裝每個后端的每個包(因為,希望項目將增長並支持越來越多的數據庫后端)
  2. 檢查是否安裝了必要的軟件包(用於PostgreSQL的psycopg2等)

我應該將后端拆分為每個數據庫類型的單獨文件,當用戶創建ProjectType實例時,它會嘗試導入必要的文件(PostgreSQL的postgresqlbackend.py ,MySQL的mysqlbackend.py等)並查看是否導入失敗(由於缺少在<backendname>backend.py文件中導入的包)?

我應該將后端拆分為每種數據庫類型的單獨文件,當用戶創建ProjectType實例時,它會嘗試導入必要的文件

這聽起來是個好主意。 不要忘記,您也可以在任何地方導入模塊(它可以在函數內部 - 它不需要位於文件的頂部)。 然后,您可以使用try/except包圍此import語句,並事先警告用戶。

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

最好的方法IMO是在加載運行時配置后首次啟動程序時打印此錯誤,指定將使用哪個模塊/數據庫類型。 這樣,用戶立即得到通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM