Google Shell中GOOGLE_APPLICATION_CREDENTIALS环境变量仅生效一天的问题求助
解决Google Shell中GOOGLE_APPLICATION_CREDENTIALS环境变量无法持久化的问题
你的操作其实没出错——问题核心就在于Google Shell的临时VM特性,正如你看到的help提示:5GB主目录会跨会话保留,但VM会话结束约20分钟后会重置,系统级的环境变量设置自然没法持久保存。下面给你几个实用的解决办法:
方法1:将环境变量写入主目录的Shell配置文件
既然主目录是持久保留的,我们可以把环境变量添加到~/.bashrc或~/.bash_profile中,让每次启动Shell时自动加载:
- 打开配置文件进行编辑:
nano ~/.bashrc - 在文件末尾添加一行(替换为你的服务账号密钥文件实际路径):
export GOOGLE_APPLICATION_CREDENTIALS="/home/你的用户名/路径/到/你的-service-account-key.json" - 保存退出后,让配置立即生效:
source ~/.bashrc
下次再打开Google Shell时,这个环境变量会自动生效,不用重复手动设置。
方法2:在PHP代码中直接指定凭证路径
如果不想依赖Shell环境变量,也可以在NLP项目的代码里直接指定服务账号密钥的路径,彻底摆脱Shell会话的限制:
use Google\Cloud\NaturalLanguage\NaturalLanguageClient; $client = new NaturalLanguageClient([ 'keyFilePath' => '/home/你的用户名/路径/到/你的-service-account-key.json' ]);
这样即便环境变量未设置,项目也能正常调用自然语言服务。
方法3:利用App Engine内置服务账号(推荐)
因为你的项目部署在Google App Engine上,其实完全可以不用手动管理服务账号密钥——App Engine会自动为应用分配默认服务账号,只要你在Cloud Console中给这个账号开启了Natural Language API的权限,客户端库会自动识别并使用内置凭证,根本不需要设置GOOGLE_APPLICATION_CREDENTIALS环境变量,这是最省心的方案。
内容的提问来源于stack exchange,提问作者Slit
相关产品推荐
相关产品推荐

