gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:58:27 25 4
gpt4 key购买 nike

我的包依赖于最新版本的 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 很少使用的接口(interface),甚至还针对其一些已知错误提供了解决方法,这可能很有值(value)。

在您的情况下,这听起来不像是问题。在上游维护人员将新版本上传到 PyPI 之前,您只需要暂时使用 jsonpickle 的前沿版本。问题不在于您不希望您的用户都拥有不同的版本;这是因为您不想强制他们克隆存储库并弄清楚如何手动安装它。幸运的是,pip 通过将大部分困难包含在一行中来为您解决这个问题:

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com