我使用Node.js中的以下代码创建了一个google云功能:
exports.hellogcspy1 = function (event, callback) {
var PythonShell = require('python-shell');
const Bigquery = require('@google-cloud/bigquery');
const storage = require('@google-cloud/storage');
var spawn = require('child_process').spawn,
py = spawn('python', ['my_script.py']);
var options = {
mode: 'text',
pythonPath: '/usr/bin/python2.7',
pythonOptions: ['-u'],
scriptPath: '.',
args: ['value1', 'value2', 'value3']
};
PythonShell.run('my_script.py', options, function (err, results) {
if (err) throw err;
console.log('results: %j', results);
});
};
我已经使用-npm install - ....
安装了所有依赖项package.json has following code :
{
"name": "python-shell",
"version": "0.4.0",
"description": "to test python run",
"main": "Node.js",
"scripts": {
"test": "python my_script.py"
},
"keywords": [
"python"
],
"author": "",
"license": "ISC",
"dependencies": {
"@google-cloud/bigquery": "^0.10.0",
"@google-cloud/storage": "^1.4.0",
"google-cloud": "^0.57.0",
"logging": "^3.2.0",
"numpy": "^0.0.1",
"python-shell": "^0.4.0"
},
"repository": {},
"devDependencies": {}
}
我在my_script.py中有以下导入:
from google.cloud import bigquery
from google.cloud.bigquery import SchemaField
from google.cloud.iterator import HTTPIterator
from numpy import array
import uuid
from uuid import uuid4
from uuid import UUID
from subprocess import call
from subprocess import PIPE,Popen
from google.cloud import storage
当我进行云功能的测试运行时,它会在python脚本上出错:
ImportError:no module called google.cloud
它可以导入其他模块,但不能导入谷歌云模块和numpy模块。我需要在新文件到达桶时运行此脚本。只要加载新文件但在运行加载时失败,就会执行该函数script.I我需要让它在云功能中工作,因为其他方法如对象更改通知,pub-sub需要外部Web链接,组织当前不允许。直接从vm运行时,脚本不会出现此错误。 有人可以帮忙解决如何解决这个ImportError问题吗?
答案 0 :(得分:1)
如果您想在Google Cloud Functions上运行Python代码,则可以使用最近宣布的Python runtime。您不再需要使用Node.js hack。 :)
答案 1 :(得分:0)
这是因为Google Cloud Functions没有安装Python的Google-cloud客户端库。
我不是Python开发人员,但以下方法应该有效: 由于您可以在功能上传过程中上传所需的任何文件,因此您可以在上传中包含google-cloud客户端库文件,并配置Python以使用这些文件。我可能不是这样,也许是通过在Node.js代码中使用process.env.PYTHONPATH配置PYTHONPATH。