我一直在尝试部署具有某些私有依赖项(pyodbc
)的Cloud Function,因为我无法通过requirements.txt
使它起作用。请注意,我不想在这里使用Docker。因此,我在此处构建的所有内容都位于文件下面,
1. main.py
2. process.py ( this one use pyodbc to connect to teradata)
3. libs (folder)
3.1 pyodbc-4.0.30.dist-info (package)
3.2 pyodbc (python extension module)
3.3 __init.py__ ( this is to make this folder as module)
4.requirements.txt
我还更新了process.py文件以导入pyodbc模块,如下所示,
import libs.pyodbc
请注意:我使用GCP文档安装了pyodbc
软件包,并使用https://cloud.google.com/functions/docs/writing/specifying-dependencies-python将其放入了libs中。
最重要的是,我也是requirements.txt
的默认导入对象。
但是我仍然收到如下所示的模块错误。
Error message: Code in file main.py can't be loaded.
Did you list all required modules in requirements.txt?
Detailed stack trace: Traceback (most recent call last):
File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 305, in check_or_load_user_function
_function_handler.load_user_function()
File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 184, in load_user_function
spec.loader.exec_module(main)
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/user_code/main.py", line 9, in <module>
from process import process
File "/user_code/process.py", line 6, in <module>
import libs.pyodbc
ModuleNotFoundError: No module named 'libs.pyodbc'
从这里得到的任何线索或帮助都非常感谢。我在这里想要实现的是,从GCP存储桶中读取CSV文件并通过数据帧处理该数据帧,该数据帧将加载到teradata中,并将输出文件生成回另一个GCP存储桶中。我正在尝试仅通过Cloud Functions实现所有功能。谢谢
答案 0 :(得分:3)
pyodbc
项目在这里可能有点特殊,因为:
这就是我要做的工作。从一个空的libs
目录开始,首先下载最新的可用源分发:
$ pip download pyodbc --no-binary :all:
为模块创建目录:
$ mkdir libs/pyodbc
将源代码分发解压缩到模块中:
$ tar xf pyodbc-4.0.28.tar.gz -C libs/pyodbc
然后,您可以在该函数中执行以下操作:
import libs.pyodbc