3

我们为工作中的各种代码保留了一个 python 库。这是共享代码、只实现一次、保持一致等的好方法。它的一部分依赖于外部库,并且对此有几个解决方案,但没有一个感觉是正确的。

一种解决方案是将整个外部库包含在我们的库中。争论的是外部库的版本是可以控制的,但是这增加了一堆代码,很丑,而且没有pythonic的感觉。

如果导入失败,另一种解决方案是try import出现打印错误。这感觉很好,是 pep8,但是我们的库有各种各样的模块,你经常需要其中的一部分,而不是另一部分。使用此解决方案,您会在不影响您的情况下看到错误。有投诉。

try:
    import zmq
    import simplejson
except:
    print "Install zmq and simplejson to use the LiveFeedSubscription()."

我建议放入try importsClass __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最佳实践是什么?

4

2 回答 2

5

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

或之类easy_install的工具也会根据需要安装您的依赖项。pipzc.buildout

于 2013-02-13T15:05:27.800 回答
2

您可以使用pip支持需求文件。这看起来像:

zmq
simplejson==1.2.3

然后,您将安装要求(假设上面requirements.txt使用的是:

pip install -r requirements.txt
于 2013-02-13T15:08:02.267 回答