我是Python新手,最近开始编写一个脚本,它基本上读取MySQL数据库,并通过将它们上传到Amazon Glacier来存档一些文件。我正在使用亚马逊提供的boto
模块以及其他一些模块。
我注意到在安装和利用连接到外部服务的这些模块时,我似乎一遍又一遍地复制相同的模式。首先,我编写一个包装器模块,它读取我的全局配置值,然后定义一个连接函数,然后我开始在该模块中编写执行各种任务的函数。例如,目前,我的boto
包装器模块名为awsbox
,它由getConnection
和glacierUpload
等函数组成。这是一个简短的例子:
import config,sys,os
import boto,uuid
_awsConfig = config.get()['aws']
def getGlacierConnection():
return boto.connect_glacier( aws_access_key_id=_awsConfig['access_key_id'],
aws_secret_access_key=_awsConfig['secret_access_key'])
def glacierUpload( filePath ):
if not os.path.isfile( filePath ):
return False
awsConnect = getGlacierConnection()
vault = awsConnect.get_vault( _awsConfig['vault'] )
vault.upload_archive( filePath )
return True
我的问题是,我应该写这些"包装"模块?这是Pythonic使用这些第三方模块的方式吗?这个方法对我有意义,但我想知道创建这些接口是否会使我的代码不那么便携或模块化,或者是否有更好的方法将这些不同的不同模块集成到我的主脚本结构中。
答案 0 :(得分:1)
您正在意图使用这些模块。您导入它们然后使用它们。在我看来,awsbox
是保存符合您需求的函数实现的模块。
回答你的猜测:
我应该写这些"包装"模块?,是(你可以停止调用它们"包装器"),错误就是重写那些已安装的模块。
这是使用这些第三方模块的Pythonic方式吗?,是Python方式吗?作者为您使用(导入)编写模块。