db2 我无法在我的azure函数中安装ibm_db python包

2q5ifsrm  于 2023-06-22  发布在  DB2
关注(0)|答案(1)|浏览(175)

我试图从azure函数访问IBMDB 2示例,但是当我将ibm_db包添加到requirement.txt并发布该函数时,在尝试安装该包时,它会出现如下所述的错误

ERROR: Command errored out with exit status 1:
   command: /tmp/oryx/platforms/python/3.8.6/bin/python3.8 /tmp/oryx/platforms/python/3.8.6/lib/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py get_requires_for_build_wheel /tmp/tmpohdx5kca
       cwd: /tmp/pip-install-ygqaie_9/ibm-db_ae91bb58811d4da4a16cf48bfdca7e17
  Complete output (8 lines):
  Detected 64-bit Python
  Detected platform = linux, uname = x86_64
  Downloading https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64_odbc_cli.tar.gz
   Downloading DSDriver from url =  https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/linuxx64_odbc_cli.tar.gz
  Pre-requisite check [gcc] : Passed

  No Python.h header file detected.
  Please install python-devel or python3-devel as instructed in "https://github.com/ibmdb/python-ibmdb/blob/master/README.md#KnownIssues" and continue with the installation

目标是能够访问DB2,而不管使用哪种语言。我尝试了Node和.NET,但他们也有自己的问题与这个包(或者我可能做错了什么)
你知道如何避免这种错误吗?
谢谢!
我们的目标是访问DB2并运行SQL语句,但我甚至没有机会安装允许我这样做的包。我尝试将函数的语言改为node和.NET,但它们也有问题

km0tfn4u

km0tfn4u1#

问题是,一些描述ibm_db模块安装过程的在线资源没有足够清楚地说明python3-dev依赖项是一个OS包。简单地将python3-dev添加到requirements.txt将不起作用。
python3-dev必须作为操作系统包安装。在Linux中,您可以通过以下方式实现:

apt-get install --yes python3-dev

Azure Functions的特殊问题是默认Azure函数映像不包含python3-dev包。让ibm_db正常工作的唯一方法是使用自定义Docker镜像创建Azure函数,这样你就可以安装python3-dev和你会遇到的另一个依赖项,即gcc。有关此主题的有用教程可以在here中找到。
另请注意,您使用的Python版本,因为Azure Function运行时(截至撰写本文时的当前版本为4.x)仅支持GA (Python 3.10, 3.9, 3.8, 3.7),请参阅此页面了解支持的版本。
考虑到以上内容,Azure Function运行时版本4.x和Python 3.10的Dockerfile示例如下:

# To enable ssh & remote debugging on app service change the base image to the one below
# FROM mcr.microsoft.com/azure-functions/python:4-python3.10-appservice
FROM mcr.microsoft.com/azure-functions/python:4-python3.10

ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true

RUN apt-get update \
    && apt-get install --yes gcc \
    && apt-get install --yes python3-dev

COPY requirements.txt /
RUN pip install -r /requirements.txt

# This last line and any additional Dockerfile content will depend on your function
COPY . /home/site/wwwroot

还建议您包含应用程序正在使用的Python包的特定版本,因此,在撰写本文时,使用ibm_db驱动程序的Azure Function requirements.txt文件需要包含:

azure-functions==1.15.0
ibm-db==3.1.4

最后一点,对于使用苹果芯片(M1、M2等)处理器的Mac用户来说,请确保您使用Rosetta运行终端,以便您可以编译amd64架构的Docker镜像,以确保其在Azure中运行。要确认您的终端正在运行Rosetta,请运行arch命令。你应该得到i386作为响应。构建amd64 Docker镜像将通过以下命令完成:

docker build --platform linux/amd64 --tag <YOUR_DOCKER_ID>/<YOUR_IMAGE_NAME> .

相关问题