构建带有外部依赖的库 -- pep8
我们在工作中维护一个Python库,用来存放各种代码。这是一个很好的方式,可以分享代码、只实现一次、保持一致性等等。不过,这个库有些部分依赖于外部库,而针对这个问题有几种解决方案,但都感觉不太合适。
一种解决方案是把整个外部库都包含进我们的库里。这样做的理由是可以控制外部库的版本,但这会增加很多代码,看起来很乱,也不太符合Python的风格。
另一种解决方案是使用try import
,如果导入失败就打印错误信息。这个方法感觉不错,符合pep8规范,但我们的库有很多不同的模块,通常你只需要其中的一部分,而不是全部。用这个方法时,如果某个模块出错,你可能会看到错误信息,但这个错误其实对你并没有影响。这让人有些不满。
try:
import zmq
import simplejson
except:
print "Install zmq and simplejson to use the LiveFeedSubscription()."
我提议把try imports
放到类的__init__
方法里(这样可以解决上面提到的问题),但这不符合pep8规范;而且这样一来,依赖关系就不容易看出来,因为它们没有在模块的顶部导入。
def __init__(self, msg_type='', msg_types=[], debug=False):
try:
import zmq
import simplejson
except:
print "Install zmq and simplejson to use the LiveFeedSubscription()."
在包含外部库时,对于这样差异很大的模块,Python的最佳实践是什么呢?
2 个回答
6
请使用一个合适的 setup.py
安装脚本,这个脚本会列出你的依赖项。你可以查看 Python打包用户指南 和 Setuptools文档 来了解更多信息。
像 easy_install
、pip
或 zc.buildout
这样的工具也会根据需要安装你的依赖项。