构建具有外部依赖关系的库 - pep8

时间:2013-02-13 15:02:58

标签: python

我们为工作中的各种代码保留了一个python库。它是一种分享代码,只实现一次,保持一致等的好方法。它的一部分取决于外部库,并且有一些对此有所影响,其中没有一种感觉正确。

一种解决方案是将整个外部库包含在我们的库中。争论的焦点是外部库的版本可以被控制,但这会增加一堆代码,很难看并且感觉不到pythonic。

另一个解决方案是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 个答案:

答案 0 :(得分:5)

使用正确的setup.py安装脚本,其中列出了您的依赖项。请参阅Python Packaging User GuideSetuptools documentation

easy_installpipzc.buildout等工具也会根据需要安装您的依赖项。

答案 1 :(得分:2)

您可以使用a requirements file支持的pip。这看起来像是:

zmq
simplejson==1.2.3

然后您将安装要求(假设上述内容位于requirements.txt中,使用:

pip install -r requirements.txt
相关问题