MaxCompute中 python udf报错:ImportError: No module named 'xxx'
找不到三方包时: 1、查看资源信息(desc resource resource-of-xxx.zip;) 检查三方包是否已上传为MaxCompute ARCHIVE类型资源,检查资源信息里的Type、LastModifiedTime、Md5sum是否符合预期。
2、查看UDF函数信息,检查注册函数时三方包资源是否已填到资源列表里。
3、检查UDF代码里是否将三方包的路径加到system path中。 假设模块名为 xxx 时,需要 确定文件夹 xxx 或文件 xxx.py 所在路径 在 UDF 里把这个路径加到 system path 中。 确定文件所在路径的方法: 如果将文件夹 resource_dir 直接压缩为 resource-of-xxx.zip。那么 UDF 运行时文件夹 resource_dir 所在路径为 work/resource-of-xxx.zip/resource_dir/ 如果选择文件夹 resource_dir 内所有文件压缩为 resource-of-xxx.zip(即不包含resource_dir)。那么 UDF 运行时 resource_dir 里的某个文件比如 xxx.py 所在路径为 work/resource-of-xxx.zip/ resource-of-xxx.zip 在本地解压后,假设xxx模块所在文件的相对路径为path1/path2/xxx.py、或xxx模块文件夹的相对路径为path1/path2/xxx。则需要在UDF代码添加如:sys.path.insert(0, 'work/resource-of-xxx.zip/path1/path2')。(ARCHIVE资源默认放在 UDF 执行路径的相对路径 ./work/ 中)
4、三方包如果是whl包,请检查whl包的后缀是否正确,python2要求名字包含“cp27-cp27m-manylinux1_x86_64”,python3要求名字包含“cp37-cp37m-manylinux1_x86_64”。whl文件直接改后缀为zip,不要对whl文件再次打包生成zip文件。
5、三方包如果不是whl包,但是是纯python包,请参考第3步检查压缩包的目录结构,需要将 xxx 文件夹或 xxx.py 的加到sys.path中。
6、三方包如果不是whl包,也不是纯python包,检查里面是否有setup.py,如果有setup.py,需要在兼容环境编译后再重新上传使用,编译方法参考:https://help.aliyun.com/document_detail/189752.html?spm=a2c4g.11186623.6.737.7ba414c4hFsPgd#title-a1a-yub-jda
7、检查UDF文件名和要引用的三方包模块名是否冲突。如果UDF文件是xxx.py,import xxx时默认会导入xxx.py而不是三方包里的模块,此时需要修改UDF文件名。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。