生产环境运行Roboflow训练模型时出现TypeError错误求助
解决Roboflow库在生产环境加载时的TypeError(expected str, bytes or os.PathLike object, not NoneType)
错误根源
从报错栈可以定位到问题:Roboflow库的config.py在加载时,尝试通过os.getenv("HOME")获取用户主目录,拼接本地配置文件路径,但你的生产环境(推测是AWS Lambda)中HOME环境变量不存在,返回了None,导致os.path.join执行失败,抛出TypeError。
测试环境(Google Colab、AWS Cloud9、sam local invoke)中HOME变量默认存在,所以不会触发这个问题。
解决方案
方法1:提前设置HOME环境变量
在导入Roboflow库之前,手动将HOME环境变量指向生产环境中可写的目录(比如AWS Lambda的/tmp目录):
import os # 设置HOME到可写的临时目录 os.environ["HOME"] = "/tmp" # 之后再导入Roboflow from roboflow import Roboflow rf = Roboflow(api_key="xxxxxxxxxxxxxxxxx") path = "/context/image.jpeg" project = rf.workspace().project("xxxxxx") model = project.version(x).model currency_result = model.predict(path, confidence=40).json()
方法2:通过环境变量跳过本地配置加载
如果不需要本地配置文件,可以直接设置Roboflow的API URL环境变量,同时仍需设置HOME避免其他潜在问题:
import os os.environ["ROBOFLOW_API_URL"] = "https://api.roboflow.com" os.environ["HOME"] = "/tmp" from roboflow import Roboflow
验证说明
- AWS Lambda中
/tmp是唯一可读写的目录,设置HOME到这里可以满足Roboflow库对配置文件路径的需求(即使不需要实际写入配置文件)。 sam local invoke模拟的是本地环境,自带HOME变量,所以测试正常,但生产环境Lambda默认没有该变量,必须手动设置。
内容的提问来源于stack exchange,提问作者user19153469
相关产品推荐
相关产品推荐

