基于配置文件中的路径导入模块

时间:2014-04-29 19:44:26

标签: python python-2.7 python-import

我有一个第三方模块(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()
     ....
     ....
     ....

当然,open方法不知道该怎么做因为cx_Oracle是在 init 中定义的,所以open方法看不到它。

我无法想象这样做的正确方法,所以我假设我在想这个。我应该怎么做才能打开(以及Database类中的所有其他方法)可以看到导入的模块?

谢谢。

1 个答案:

答案 0 :(得分: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添加多个相同的条目。