我有一个第三方模块(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类中的所有其他方法)可以看到导入的模块?
谢谢。
答案 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
添加多个相同的条目。