Python 基于配置文件中的路径导入模块
我有一个第三方模块(cx_Oracle),我想将其导入,其位置在不同的环境中是未知的。我目前正在使用pythons configparser,因此我认为在配置解析器中设置模块的位置,将该位置附加到路径,然后从那里导入第三方模块将是一个巧妙的技巧 在我开始重构代码并开始将逻辑拆分为它们自己的类/方法之前,这一切都很顺利:Python 基于配置文件中的路径导入模块,python,python-2.7,python-import,Python,Python 2.7,Python Import,我有一个第三方模块(cx_Oracle),我想将其导入,其位置在不同的环境中是未知的。我目前正在使用pythons configparser,因此我认为在配置解析器中设置模块的位置,将该位置附加到路径,然后从那里导入第三方模块将是一个巧妙的技巧 在我开始重构代码并开始将逻辑拆分为它们自己的类/方法之前,这一切都很顺利: class Database: def __init__(self, config): self.CONFIG=config sys.p
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(以及数据库类中的所有其他方法)看到导入的模块
谢谢。如果您只需要在该类中使用
cx\u 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()
作为旁注,如果您要创建多个
数据库
实例,这是一种奇怪的方法,因为您最终会将多个相同的条目添加到sys.path
,这看起来像是混淆了导入模块、打开文件和/或连接到数据库。如果在已知位置没有要导入的模块,通常是非常糟糕的设计,您应该控制它。我不清楚,如果我没有弄错的话,您对`self.open()的导入的的预期范围只会在\uuuu init\uuuu
中。我想您正在寻找\uuu import\uu()
@JanVlcinsky我正在导入cx\u Oracle模块,以便与Oracle数据库通信。然后,我在self.open()方法中打开与该数据库的连接。我知道模块通常应该在已知的位置,也许我应该和我的IT团队谈谈,让模块安装在正确的位置。一般来说,我们各个团队之间的摩擦较少,只需将“您需要的一切”放在一个文件夹中即可。我遇到的问题是从另一个位置调用程序,也许这就是我工作过度的原因。@PatrickBateman我的评论可能太快了。有了甲骨文,有时可能会很困难。也许这个答案对您有帮助:数据库实例将被调用一次。在类内部有一个insert语句,我可以随时调用它。这是一个非常简单的程序,只是记录一些活动。你的答案就是我一直在寻找的;非常感谢。