Python Gradle使用Chaquopy生成内存问题

Python Gradle使用Chaquopy生成内存问题,python,android,gradle,chaquopy,Python,Android,Gradle,Chaquopy,我有一个Android摄像头应用程序和一个单独的Python图像处理管道,我想使用Chaquopy与该应用程序集成。然而,python代码本身很大,并且依赖于大约50个模块,例如tensorflow、opencv、scikit image、numpy和scipy等。我可以在相机应用程序的传入帧上运行一个玩具python函数。但是,我甚至无法构建完整的管道,因为Gradle退出时出现以下错误: 任务:应用程序:GeneratedBugPythonRequirementAssets 任务:应用程序:

我有一个Android摄像头应用程序和一个单独的Python图像处理管道,我想使用Chaquopy与该应用程序集成。然而,python代码本身很大,并且依赖于大约50个模块,例如tensorflow、opencv、scikit image、numpy和scipy等。我可以在相机应用程序的传入帧上运行一个玩具python函数。但是,我甚至无法构建完整的管道,因为Gradle退出时出现以下错误:

任务:应用程序:GeneratedBugPythonRequirementAssets

任务:应用程序:GeneratedBugPythonBuildAssets失败

内存不足:Java堆空间。 请在项目的Gradle.properties文件中为Gradle分配更多内存。 例如,gradle.properties文件中的以下行将最大Java堆大小设置为1024MB:

它在“应用程序:GeneratedBugPythonRequirementAssets”或 “应用程序:GeneratedBugPythonBuildAssets”,取决于requirements.txt中的模块数量

我曾尝试按照建议将堆空间增加到128GB,但没有效果

如何减少内存需求以适应合理的空间

编辑

这是build.gradle中的pip块

pip {
    install "-r", "requirements.txt"
}
requirements.txt文件包含以下内容:

absl-py==0.9.0
ansicolors==1.1.8
astor==0.8.1
cachetools==4.0.0
certifi==2019.11.28
chardet==3.0.4
cycler==0.10.0
decorator==4.4.2
gast==0.2.2
google-auth==1.11.3
google-auth-oauthlib==0.4.1
google-pasta==0.2.0
grpcio
h5py==2.10.0
idna==2.9
imageio==2.8.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
kiwisolver==1.1.0
Markdown==3.2.1
matplotlib
networkx==2.4
nose==1.3.7
numpy
oauthlib==3.1.0
opencv-contrib-python==4.1.2.30
opt-einsum==3.2.0
Pillow==7.0.0
protobuf==3.11.3
pyasn1==0.4.8
pyasn1-modules==0.2.8
pyparsing==2.4.6
python-dateutil==2.8.1
PyWavelets==1.1.1
requests==2.23.0
requests-oauthlib==1.3.0
rsa==4.0
scikit-image==0.16.2
scipy==1.4.1
six==1.14.0
tensorboard==2.1.1
tensorflow==2.1.0
termcolor==1.1.0
urllib3==1.25.8
Werkzeug==1.0.0
wrapt==1.12.1
编辑

这是一个完整的堆栈跟踪

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Application:generateDebugPythonBuildAssets'.
> Java heap space

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':Application:generateDebugPythonBuildAssets'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:151)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:148)
    at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:141)
    at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionStateTaskExecuter.execute(ResolveBeforeExecutionStateTaskExecuter.java:75)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
    at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
    at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
    at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:73)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
    at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
    at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.OutOfMemoryError: Java heap space
    at com.chaquo.python.PythonPlugin.hashAssets(PythonPlugin.groovy:761)
    at com.chaquo.python.PythonPlugin$hashAssets$15.callCurrent(Unknown Source)
    at com.chaquo.python.PythonPlugin.hashAssets(PythonPlugin.groovy:749)
    at com.chaquo.python.PythonPlugin$_createAssetsTasks_closure24$_closure61.doCall(PythonPlugin.groovy:679)

通过将以下内容添加到gradle.properties文件解决了此问题

org.gradle.jvmargs=-Xmx16G


org.gradle.workers.max=1

请编辑您的问题,给出两个gradle错误的完整堆栈跟踪。如果您从build.gradle文件中包含
pip
块,它也会很有用。此外,编辑gradle.properties文件后,您可能需要终止gradle守护进程,以便在下一次生成时重新启动它。我已按您的要求编辑了问题。我不知道如何杀死gradle守护进程。我正在android studio中使用失效缓存/重启。够了吗?为了安全起见,我重新启动了系统。没有任何变化。我认为重启Android Studio应该足够了,但您可能还想检查是否有其他Java进程正在运行。有趣的是:您确实需要这两个进程吗,或者其中一个本身就足够了吗?已验证org.gradle.jvmargs=-Xmx16G足够了。Chaquopy 7.0.3版修复了过度内存使用问题,因此在该版本或更高版本上不再需要编辑gradle.properties。