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

jha*_*hau 2 python

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

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

try import如果导入失败,另一个解决方案是打印错误.这感觉很好,是pep8,但是我们的库有很多种模块,你经常需要它的一部分,而不是另一部分.使用此解决方案,您会在不影响您的情况下看到错误.有抱怨.

try:
    import zmq
    import simplejson
except:
    print "Install zmq and simplejson to use the LiveFeedSubscription()."
Run Code Online (Sandbox Code Playgroud)

我提议try imports加入Class __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()."
Run Code Online (Sandbox Code Playgroud)

将外部库包含在具有如此大的不同模块的库中的python最佳实践是什么?

Mar*_*ers 5

请改用适当的setup.py安装脚本,列出您的依赖项.请参阅Python Packaging用户指南Setuptools文档.

如工具easy_install,pipzc.buildout根据需要也将安装您的依赖.