2013-05-22 60 views
0

無論出於何種原因,從黑暗的歷史中,我們一直在Windows上運行pyodbc很長一段時間,但它被稱爲odbc。可以在Ubuntu上將pyodbc egg重命名爲odbc egg嗎?

現在試圖移植到Linux,我已經安裝了pyodbc,但現在我的長時間運行的代碼不能「導入odbc」,雖然「導入pyodbc」工作正常。

一個解決方案是「如果sys.plateform.find('linux')」做一個「導入pyodbc作爲odbc」或「導入pyodbc」取決於,但這似乎很難。

有沒有辦法重新命名雞蛋?

我試着天真地只是重命名這兩個文件,「導入odbc」發現這些文件。 。 。但隨後似乎因爲內部命名的混淆:

 
    File "/local/mnt/workspace/aswp401/source/qcom/qct/modem/arch/sandbox/fmerrow/hub/py/utils/dbutils.py", line 1, in 
    import odbc 
ImportError: dynamic module does not define init function (initodbc) 

當然,作爲該功能名爲initpyodbc的問題,而不是initodbc。

是否有官方的方式來做這樣的重命名?或者是sys.platform我最好的選擇?

弗蘭克

回答

0

處理這種情況最簡單的方法是:

try: 
    import pyodbc 
except ImportError: 
    import odbc as pyodbc 

除非有一些令人信服的理由不這樣做,不要試圖去猜測將要安裝哪一個,只是嘗試出來。這是一個EAFP的情況 - 但除了通常的優點之外,事實上它會繼續工作,即使您的猜測後來變得無效(例如,因爲您設置了OpenBSD機器,在Windows機器上升級軟件包, ...)。

通常先嚐試模塊的官方當前名稱,然後嘗試使用舊版/變體版/等。名稱作爲後備。

這也是通常最好使用整個代碼的官方當前的名字......但如果你已經得到了很多的代碼,不會odbc.thisodbc.that,你不相信一個簡單的搜索和替換或其他重構工具,你可以改爲import pyodbc as odbc


只需重命名的雞蛋可能會或可能無法正常工作(它看起來像它不會在你的情況下),但它即使它是一個壞主意。

至少,它會混淆你的包管理器(無論是apt,easy_install,pip或其他)。例如,它可能無法升級或卸載軟件包,安裝依賴它的其他軟件包等。

最糟糕的是,它可能「主要」工作,但然後因爲例如某些代碼被掩埋而失敗在包中間的C擴展模塊中,依賴於完全限定的模塊名稱,並且該代碼僅在應用程序的一些罕見邊緣情況下才會被調用。

相關問題