2014-04-29 111 views
0

我有一個第三方模塊(cx_Oracle),我想導入其位置未知的環境。我目前使用pythons configparser,所以我認爲在配置解析器中設置模塊的位置,將該位置追加到路徑,然後從那裏導入第三方模塊將是一個巧妙的技巧。根據配置文件中的路徑導入模塊

這個工作的所有罰款和花花公子,直到我開始重構我的代碼,並開始邏輯拆分到自己的類/方法:

class Database: 

    def __init__(self, config): 
     self.CONFIG=config 
     sys.path.append(self.CONFIG.cx_oracle_path) 
     from cx_Oracle import cx_Oracle 

     self.open() 

    def open(self): 
     self.CONNECTION = cx_Oracle.Connection(self.CONFIG.username, 
     self.CONFIG.password, 
     self.CONFIG.db_sid) 
     self.CURSOR = self.CONNECTION.cursor() 
    .... 
    .... 
    .... 

當然,開放的方法不知道該怎麼辦,因爲cx_Oracle在init中定義,所以open方法看不到它。

我無法想象做到這一點的正確方法,所以我假設我正在考慮這一點。我應該怎麼做才能打開(以及Database類中的所有其他方法)可以看到導入的模塊?

謝謝。

+0

它看起來像你混淆了導入模塊,打開文件和/或連接到數據庫。它通常是非常糟糕的設計,沒有模塊在已知位置導入,您應該控制它。我不清楚,你期望從'self.open() –

+0

你的'import'只會在'__init__'範圍內,如果我沒有弄錯。我想你正在尋找'__import __()'。 – 2rs2ts

+0

@JanVlcinsky我在導入cx_Oracle模塊,以便可以與oracle數據庫進行通信。然後,我在self.open()方法中打開與該數據庫的連接。我明白模塊通常應該在已知的位置,也許我應該告訴我的IT團隊將模塊安裝在正確的位置。一般來說,我們各個團隊之間的摩擦少,只需在一個文件夾中擁有「您需要的一切」。我遇到的問題是從不同的位置調用該程序,也許這就是我自己工作的地方。 –

回答

1

如果您只需要在該類中使用cx_Oracle,你可以將其設置爲在這種情況下的屬性,例如:

class Database: 

    def __init__(self, config): 
     self.CONFIG=config 
     sys.path.append(self.CONFIG.cx_oracle_path) 
     from cx_Oracle import cx_Oracle 
     self.cx_Oracle = cx_Oracle 
     self.open() 

    def open(self): 
     self.CONNECTION = self.cx_Oracle.Connection(self.CONFIG.username, 
                self.CONFIG.password, 
                self.CONFIG.db_sid) 
     self.CURSOR = self.CONNECTION.cursor() 

作爲一個側面說明,如果要創建多個Database情況下,這是一種奇怪的方法,因爲您最終會在sys.path中添加多個相同的條目。

+0

數據庫實例將被調用一次。在課堂內部有一個插入語句,我會隨時調用我需要的。這是一個非常簡單的程序,只記錄一些活動。你的答案是我正在尋找的;謝謝。 –

相關問題