Python包导入子包-好的做法?

迈克·维拉

我的软件包依赖于最新版本的jsonpickle软件包。较早的版本可以通过pip安装,但是我需要最新的版本(例如,在Github上)才能运行。在这种情况下,将最新版本的jsonpickle捆绑在我的代码中通常被认为可以吗?还有其他解决方案吗?我不想让我的用户不要从github克隆。

我正在考虑这样组织我的包裹:

My package
    |
__init__.py
 file1.py
 file2.py
          \
        jsonpickle (latest)

即执行此处的操作:Python:导入子包或子模块

阿巴内特

正如kag所说,这通常不是一个好主意。这并不是说它不赞成其他软件包,而是因为它给您和您的用户带来了维护负担。(想象一下,有一个已修复的错误jsonpickle会影响您的用户,但您尚未修复此错误。如果您正常进行操作,那么他们要做的就是升级jsonpickle,但是如果您使用的是内部副本,他们必须下载jsonpickle源代码和您源代码,破解您的软件包,然后手动安装它们。)

有时,还是值得做的。例如,非常受欢迎的requests模块包括其他软件包的自己的副本,例如urllib3是的,它确实要面对上述两个成本。但这也意味着的每个版本都request可以依赖的确切特定版本urllib3由于requests大量使用了urllib3很少使用的接口,甚至还解决了一些已知的错误,因此可能很有价值。

就您而言,这听起来不像是问题。您只需要jsonpickle临时提供最新版本,直到上游维护者将新版本上传到PyPI。问题不在于您不希望所有用户都使用不同的版本;这是您不想强迫他们克隆存储库并弄清楚如何手动安装它。幸运的是,pip通过将大多数困难汇总为一行,为您解决了这一问题:

pip install git+https://github.com/foo/bar

这不是一个漂亮的解决方案,但这只是暂时的,对吧?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章