用pyinstaller 打包一段带有googlespreadsheet api的文件,打包成功,运行时报错
使用的库
import os
import time
import pandas as pd
from googleapiclient.discovery import build
from google.oauth2 import service_account
import numpy as np
import datetime
SERVICE_ACCOUNT_FILE = 'keys.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
SP_ID = '1B6aZWgyjkqtJ0uSTze4huvJQDESdIuUDB8iMbP_exk0'
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
Traceback (most recent call last):
File "a.py", line 19, in
service = build('sheets', 'v4', credentials=creds)
File "googleapiclient_helpers.py", line 131, in positional_wrapper
return wrapped(*args, **kwargs)
File "googleapiclient\discovery.py", line 287, in build
content = _retrieve_discovery_doc(
File "googleapiclient\discovery.py", line 404, in _retrieve_discovery_doc
raise UnknownApiNameOrVersion("name: %s version: %s" % (serviceName, version))
googleapiclient.errors.UnknownApiNameOrVersion: name: sheets version: v4
这API我没用过
不过无非就是那么几种原因
1.你调用的api不是一个纯的py文件,所以打包过程并没有将源码直接生成exe和dll到你的目标文件夹,而需要依赖外部dll
2.你环境里没有对应的dll,或者有dll但没有加入环境变量。你用pycharm能访问是因为在pycharm里做过设置,不代表你生成了exe之后依然能找到。
解决办法
1.要么找到dll,直接放到自己的源代码里,一起编译,这样无论环境里有没有dll都能运行
2.要么编译之后手动把dll复制到目标文件夹,效果同1
3.要么目标机器上要有对应的dll,并配置好环境变量