如果您是Apple用户,并且想使用Python构建Azure功能,那么您就不幸了。 Azure功能核心工具不支持python在ARM64上的功能。有一个解决方法,这篇文章向您展示了如何。
ARM64支持Azure功能
Apple于2020年11月使用其Apple Silicon处理器(目前M1和M2)移至ARM64架构,现在他们的整个Linup都使用了Apple Silicon,除了相当过时的Mac Pro。尽管如此,在ARM64上运行Python功能的支持尚未实现。您可以使用func init
和func new
创建功能,但是当您运行它们时,您会收到一个错误:
➜ functions-m1 func start
Found Python version 3.10.11 (python3).
Azure Functions Core Tools
Core Tools Version: 4.0.5095 Commit hash: N/A (64-bit)
Function Runtime Version: 4.16.5.20396
[2023-05-08T21:29:33.030Z] Failed to initialize worker provider for: /opt/homebrew/Cellar/azure-functions-core-tools@4/4.0.5095/workers/python
[2023-05-08T21:29:33.030Z] Microsoft.Azure.WebJobs.Script: Architecture Arm64 is not supported for language python.
[2023-05-08T21:29:33.409Z] Failed to initialize worker provider for: /opt/homebrew/Cellar/azure-functions-core-tools@4/4.0.5095/workers/python
[2023-05-08T21:29:33.409Z] Microsoft.Azure.WebJobs.Script: Architecture Arm64 is not supported for language python.
[2023-05-08T21:29:33.558Z] A host error has occurred during startup operation '2a13f8c8-f2e4-4da0-a88c-205dbd3065c2'.
[2023-05-08T21:29:33.558Z] Microsoft.Azure.WebJobs.Script: Did not find functions with language [python].
[2023-05-08T21:29:33.564Z] Failed to stop host instance '1e7799d1-a87f-404a-9bc1-858c7724aeec'.
[2023-05-08T21:29:33.564Z] Microsoft.Azure.WebJobs.Host: The host has not yet started.
Value cannot be null. (Parameter 'provider')
Microsoft最初针对其Python 3.10版本的支持,但错过了。目前,他们说,如this GitHub issue所述,它将带有Python 3.11的支持。他们建议的解决方法涉及将您的终端更改为始终在Rosetta 2下运行,这感觉就像是做事的坏方式。有一个更好的解决方法,利用开发容器。
开发容器
开发容器是您运行并从VS代码连接的Docker容器。作为用户,这些是无缝的 - 您仍然可以从VS代码外部访问文件系统,但是在内部,Dev环境在容器中运行,所有依赖项都安装在容器中,而不是在主机OS上。您可以在the VS Code developing inside containers documentation上阅读有关这些信息。
Docker支持使用QEMU仿真或使用Rosetta 2在Apple Silicon Mac上运行X86和X64容器。这意味着您可以创建一个X64容器并在Mac上运行此操作,并在容器内运行Azure函数核心工具!很酷,嘿!
配置Docker
您需要安装docker,因此请先安装此此操作。安装后,您需要配置一些东西。
-
从docker菜单项中,选择设置
-
从一般节中,确保选择虚拟化框架
- 从开发中的特征部分中,选择 beat特征,然后选择在Apple Silicon上使用X86/AMD64的Rosetta
- 应用这些更改,Docker桌面将重新启动。
创建开发容器
默认的Azure函数和Python3 Dev容器是理想的选择,因为它是x86/x64容器。
-
确保Docker正在运行。
-
为您的Azure Functions应用创建一个文件夹,然后在VS代码中打开它(或打开您已经创建的一个文件夹)
-
确保您安装了Dev Containers extension。这也带有Remote Development extension Pack。
-
打开命令调色板并选择 dev容器:添加dev容器配置文件
- 选择显示所有定义以查看所有开发容器选项
- 搜索并选择 azure函数&Python 3
-
选择您想要的任何其他功能。您不需要任何Azure功能才能工作。
-
将构建容器文件,并将弹出一个选项以重新打开容器中的文件夹。选择在容器中重新打开
- 一旦存储库重新打开在容器中,打开终端,您会看到它标记为Rosetta下的运行
-
如果您已经没有Azure函数应用程序,现在可以创建一个。
-
运行您的Azure函数应用程序!
将DevContainer文件提交给GitHub后,您还可以在CodeSpace中打开此文件,并将其与所需的所有内容进行预配合。您还可以根据您的需求将更多内容添加到容器中,例如,加载容器时自动加载的扩展名,安装物品,无论您需要什么!查看the VS Code developing inside containers documentation以了解更多信息。