根据配置文件中的路径导入模块
我有一个第三方模块(cx_Oracle),它的位置在不同的环境中是未知的。我现在使用的是Python的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方法看不到它。
我想不出正确的做法,所以我觉得我可能想得太复杂了。那我该怎么做才能让open(以及Database类中的其他方法)都能看到这个导入的模块呢?
谢谢。
1 个回答
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
里添加多个一模一样的条目。