Android Studio中Chaquopy集成pytube遇RegexMatchError的解决咨询
解决Chaquopy集成pytube时的RegexMatchError问题
问题根源
你修改的C:\Users\....\AndroidStudioProjects\YouTubeDownloader\app\build\pip\debug\common\pytube\cipher.py属于构建临时文件,每次执行clean、rebuild或项目同步操作时,Chaquopy会重新从PyPI下载/解压pytube包,覆盖该目录下的内容,所以手动修改后会自动恢复原状。
正确修改方法
方法一:使用本地修改后的pytube包
- 下载pytube源码包(或克隆GitHub仓库),找到
cipher.py文件完成修改:- 原代码:
var_regex = re.compile(r"^\w+\W") - 修改为:
var_regex = re.compile(r"^\$*\w+\W")
- 原代码:
- 将修改后的整个
pytube目录(包含__init__.py、cipher.py等所有文件)复制到项目的app/src/main/python目录下(没有则新建该目录)。 - 修改
app/build.gradle中的Chaquopy配置,指定使用本地pytube包:chaquopy { defaultConfig { pip { // 注释掉原有的pytube依赖,改用本地包 // install "pytube" install "--no-deps", "./src/main/python/pytube" } } } - 同步项目并重新构建,此时Chaquopy会优先加载你修改后的本地包,不会被覆盖。
方法二:通过Gradle任务自动patch文件
如果不想替换整个包,可通过Gradle任务在构建时自动修改目标文件:
- 在
app/build.gradle中添加以下任务:task patchPytubeCipher { doLast { def cipherFile = file("build/pip/debug/common/pytube/cipher.py") if (cipherFile.exists()) { def content = cipherFile.text def newContent = content.replaceAll(/var_regex = re.compile\(r"^\w\+\\W"\)/, 'var_regex = re.compile(r"^\\$*\\w+\\W")') cipherFile.write(newContent) } } } // 绑定任务到pip安装步骤之后 afterEvaluate { tasks.findByName("pipInstallDebug").finalizedBy(patchPytubeCipher) } - 同步项目后,每次构建时Gradle会自动在pip安装完成后修改
cipher.py,无需手动操作。
Android Studio中Python模块的存放说明
- 临时构建目录:
app/build/pip/[debug/release]/common/:构建时临时生成,每次构建会刷新,禁止直接修改。 - 本地自定义模块目录:
app/src/main/python/:存放自定义或修改后的第三方包,Chaquopy会优先加载此目录下的模块。 - 全局缓存目录:
C:\Users\<你的用户名>\.chaquopy\cache\pip:Chaquopy下载的包缓存位置,修改会影响所有Chaquopy项目,不推荐。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

