Jython 是我的代码库中的负担吗?
Is Jython a liability in my codebase?
我继承了一个大型 Java/Scala 代码库,它使用 Jython 与我们同样大型的 Python 代码库进行交互。事情进展顺利,直到大约三天前,突然间我们所有的构建都开始在 Jython 阶段失败并显示消息:
RuntimeException: java.lang.RuntimeException: Method code too large!
事实证明,JVM 内部方法的大小有 65kb 的内部限制。 Python 请求的最新版本似乎是罪魁祸首,它是我们 Python 代码库的重要依赖项。我的猜测是最新版本在某处引入了一个非常大的 class。
最明显的解决方案是将请求库版本固定到较早的版本。我是否应该固定我们 Python 代码的所有库版本(就像我在 Java 中所做的那样)?除了版本固定之外还有什么解决方法吗?我是不是冒了太大的风险?
我今天刚好开始使用 Requests 库,运行 加入其中。追踪到 Idna 库,特别是数据结构超过 Java 的 64 kb Class 限制的 uts46data.py 文件(伙计,这是个愚蠢的东西)。
克隆了主存储库并在 https://github.com/METAVERO/idna 处更正了它
在请求和 indna githubs 上留下注释。您可以查看我的更改并将它们合并到新的请求下载中。
我继承了一个大型 Java/Scala 代码库,它使用 Jython 与我们同样大型的 Python 代码库进行交互。事情进展顺利,直到大约三天前,突然间我们所有的构建都开始在 Jython 阶段失败并显示消息:
RuntimeException: java.lang.RuntimeException: Method code too large!
事实证明,JVM 内部方法的大小有 65kb 的内部限制。 Python 请求的最新版本似乎是罪魁祸首,它是我们 Python 代码库的重要依赖项。我的猜测是最新版本在某处引入了一个非常大的 class。
最明显的解决方案是将请求库版本固定到较早的版本。我是否应该固定我们 Python 代码的所有库版本(就像我在 Java 中所做的那样)?除了版本固定之外还有什么解决方法吗?我是不是冒了太大的风险?
我今天刚好开始使用 Requests 库,运行 加入其中。追踪到 Idna 库,特别是数据结构超过 Java 的 64 kb Class 限制的 uts46data.py 文件(伙计,这是个愚蠢的东西)。
克隆了主存储库并在 https://github.com/METAVERO/idna 处更正了它 在请求和 indna githubs 上留下注释。您可以查看我的更改并将它们合并到新的请求下载中。