我的包依赖于最新版本的jsonpickle包。旧版本可以通过pip安装,但是我需要最新版本(即在Github上)才能工作。在这种情况下,在我的代码中捆绑最新版本的jsonpickle通常被认为是可以的吗?还有别的办法吗?我不想让我的用户不要从github克隆。
我正考虑这样整理我的包裹:

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

即做在这里做的事:Python: importing a sub‑package or sub‑module

最佳答案

正如kag所说,这通常不是一个好主意。这并不是因为对其他软件包不友好而“不高兴”,而是因为它给您和您的用户带来了维护负担。(假设在jsonpickle中修复了一个影响用户的错误,但是您还没有修复。如果你做得正常,他们只需要升级jsonpickle,但如果你使用的是内部副本,他们必须下载jsonpickle源代码和你的,破解你的软件包,然后手动安装。)
有时候,还是值得做的。例如,非常流行的requests模块包括its own copy等其他包的urllib3。是的,它确实面临上述两种成本。但这也意味着每个版本的request都可以依赖于一个精确的特定版本的urllib3。因为requests大量使用了urllib3很少使用的接口,甚至为其已知的一些错误提供了解决方法,这是很有价值的。
对你来说,这听起来不像是个问题。在上游维护人员将新版本上传到PyPI之前,您只需要暂时使用一个边缘版本的jsonpickle。问题不是你不希望你的用户都有不同的版本,而是你不想强迫他们克隆repo,并想办法手动安装。幸运的是,pip帮你解决了这个问题,把大部分困难都归结为一行:

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

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

关于python - Python包导入子包-好的做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18282767/

10-11 16:28