依赖项: 使用 httpx 替换请求
而不是一个建议或甚至提案,我只是在开启这个主题,作为对未来可能取代 Streamlink 的 requests 依赖的早期讨论。httpx 是一个新的替代库,与 requests 的 API 近乎相同,并且提供了更多功能,例如 HTTP/2,并且 (可选地) 还允许编写更现代的代码,例如异步 HTTP 请求。过去曾有尝试通过 requests-async 为 requests 提供异步 API,但该项目被放弃,其作者继续开发 httpx 项目。requests 可能被数十万甚至数百万个 Python 生态系统中的项目所依赖,但它在升级和功能方面已经非常陈旧,其中一些可选依赖,如 PySocks (我们出于某种原因在这里直接定义了它) 已经被放弃了多年。httpx 采用 BSD 3 条款许可协议,与 requests 相比,其依赖项有完全不同的集合,其自身项目和依赖项目的目的和功能之间有着更明确的区分,这与 requests 和 urllib3 不同,它们有时很难理解和调试。requests 和 urllib3 也因其广泛的使用而面临着 3.0.0 和 2.0.0 版本的未来问题,这意味着仍然存在许多过时的内容,例如 py2 兼容性等。然而,httpx 的稳定 1.0.0 版本尚未发布,因此即使这里的所有人都达成了强烈共识,即使很容易替换,也还没有意义。谈到替换的容易性,由于两个项目共享了几乎相同的 API,将其作为 Streamlink 的 HTTPSession 基类 应该 是相当简单的。然而,多年来,我们已经对 requests 和 urllib3 添加了许多兼容性 bugfix 和 monkey patch( 1, 2),这意味着需要先检查和评估此问题。此外,两个项目之间也存在差异 这里。大多数情况应该都没问题,只需要在 HTTPSession 类本身进行更改,而不需要在实际的 http 会话使用中,例如流实现或插件等。对于 Streamlink 的用户,我不认为会有任何重大变化,…
内容来源: streamlink/streamlink