英文:
Installing GDAL for python in Google Cloud Functions -- error when deploying
问题
我在Google Cloud Function中使用Python 3.9时未能成功使用GDAL。我在"requirements.txt"文件中包含了gdal:
numpy
pygrib
requests
google-cloud-storage
gdal
但在部署函数时出现以下错误:
构建失败: .../setuptools/command/egg_info.py", 行 541, 在运行时
self.add_defaults()
文件 "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/command/egg_info.py", 行 578, 在add_defaults中
sdist.add_defaults(self)
文件 "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py", 行 228, 在add_defaults中
self._add_defaults_ext()
文件 "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py", 行 311, 在_add_defaults_ext中
build_ext = self.get_finalized_command('build_ext')
文件 "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", 行 299, 在get_finalized_command中
cmd_obj.ensure_finalized()
文件 "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", 行 107, 在ensure_finalized中
self.finalize_options()
文件 "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", 行 255, 在finalize_options中
gdaldir = self.get_gdal_config('prefix')
文件 "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", 行 194, 在get_gdal_config中
raise gdal_config_error(traceback_string + '\n' + msg)
__main__.gdal_config_error: 最近的调用堆栈(最近的呼叫位于最上方):
文件 "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", 行 87, 在fetch_config中
p = subprocess.Popen([command, args], stdout=subprocess.PIPE)
文件 "/layers/google.python.runtime/python/lib/python3.9/subprocess.py", 行 951, 在__init__中
self._execute_child(args, executable, preexec_fn, close_fds,
文件 "/layers/google.python.runtime/python/lib/python3.9/subprocess.py", 行 1821, 在_execute_child中
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] 没有这样的文件或目录:'gdal-config'
在处理上述异常时,发生了另一个异常:
最近的调用堆栈(最近的呼叫位于最上方):
文件 "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", 行 188, 在get_gdal_config中
returnfetch_config(option, gdal_config=self.gdal_config)
文件 "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", 行 90, 在fetch_config中
raise gdal_config_error(e)
gdal_config_error: [Errno 2] 没有这样的文件或目录:'gdal-config'
无法找到gdal-config。确保您已安装GDAL原生库和开发标头。
注意:此错误源自子进程,可能与pip无关。
错误:metadata-generation-failed
回顾其他类似的帖子,例如GDAL包缺失,似乎需要在运行pip install gdal
之前安装GDAL库/标头,即sudo apt-get install libgdal-dev
。鉴于我无法为云函数运行apt-get,是否有人有解决方法或解决方法?
英文:
I've been unsuccessful in using GDAL in a Google Cloud Function with Python 3.9. I've included gdal in the "requirements.txt" file:
numpy
pygrib
requests
google-cloud-storage
gdal
But get the following error when deploying the function:
Build failed: .../setuptools/command/egg_info.py", line 541, in run
self.add_defaults()
File "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/command/egg_info.py", line 578, in add_defaults
sdist.add_defaults(self)
File "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py", line 228, in add_defaults
self._add_defaults_ext()
File "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/command/sdist.py", line 311, in _add_defaults_ext
build_ext = self.get_finalized_command('build_ext')
File "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 299, in get_finalized_command
cmd_obj.ensure_finalized()
File "/layers/google.python.pip/pip/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 107, in ensure_finalized
self.finalize_options()
File "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", line 255, in finalize_options
gdaldir = self.get_gdal_config('prefix')
File "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", line 194, in get_gdal_config
raise gdal_config_error(traceback_string + '\n' + msg)
__main__.gdal_config_error: Traceback (most recent call last):
File "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", line 87, in fetch_config
p = subprocess.Popen([command, args], stdout=subprocess.PIPE)
File "/layers/google.python.runtime/python/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/layers/google.python.runtime/python/lib/python3.9/subprocess.py", line 1821, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'gdal-config'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", line 188, in get_gdal_config
return fetch_config(option, gdal_config=self.gdal_config)
File "/tmp/pip-install-d9gag00y/gdal_e01a421a21914f03a3c89fd3914501b0/setup.py", line 90, in fetch_config
raise gdal_config_error(e)
gdal_config_error: [Errno 2] No such file or directory: 'gdal-config'
Could not find gdal-config. Make sure you have installed the GDAL native library and development headers.
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.; Error ID: c84b3231
Reviewing other similar posts, e.g. GDAL package missing, it seems that the GDAL library/headers needs to be installed, sudo apt-get install libgdal-dev
, before the pip install gdal
will work. Given that I can't run apt-get for a cloud function, does anyone have a fix or workaround?
答案1
得分: 2
将此内容发布为社区维基,以帮助其他社区成员解决此问题:
"GDAL Libraries is not supported by Google Cloud Function at the moment. However, you can use Cloud Run for special cases where you have full control over the container."
英文:
Posting this as a community wiki to help other community members that will encounter this issue:
GDAL Libraries is not supported by Google Cloud Function at the moment. However, you can use Cloud Run for special cases where you have full control over the container.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论