【发布时间】:2014-06-15 22:24:44
【问题描述】:
我有一个第三方模块 (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 方法看不到它。
我无法想象正确的方法来做到这一点,所以我假设我想多了。我应该怎么做才能让 open(以及 Database 类中的所有其他方法)可以看到导入的模块?
谢谢。
【问题讨论】:
-
您似乎对导入模块、打开文件和/或连接数据库感到困惑。在已知位置没有要导入的模块通常是非常糟糕的设计,您应该控制它。我不清楚你对 `self.open() 的期望
-
如果我没记错的话,你的
import只会在__init__内有作用域。我想你正在寻找__import__()。 -
@JanVlcinsky 我正在导入 cx_Oracle 模块,以便可以与 Oracle 数据库通信。然后,我在 self.open() 方法中打开与该数据库的连接。我知道模块通常应该位于已知位置,也许我应该与我的 IT 团队沟通,将模块安装在正确的位置。通常,我们各个团队之间的摩擦较少,只需将“您需要的一切”放在一个文件夹中即可。我遇到的问题是从不同的位置调用程序,也许那是我自己过度工作的地方。
-
@PatrickBateman 我的评论可能太快了。使用 Oracle 有时可能会很困难。可能这个答案可以帮助你:stackoverflow.com/a/4784441/346478
标签: python python-2.7 python-import