我有一個專案,它使用 virtualenv 打包了一個 python 2.7 專案,其中包含我在 requirements.txt 檔案中找到的 3 個依賴項:boto3、botocore 和 pypdftk。
Boto3 是適用于 Python 的 Amazon Web Services SDK,botocore 也是如此(我相信。)Pypdftk 是一些用于在 Python 中轉換 PDF 的外部庫。
現在我應該把這個專案壓縮成一個 zip 檔案并上傳到 AWS Lambda,一個用于無服務器計算的服務。
此外,AWS Lambda 僅支持標準的 python 3.9 庫和運行時。所以因為我的專案有這些外部庫和依賴項,過去的開發人員似乎使用 virtualenv 來:
- 打包一個棄用的python 2.7版本
- 打包requirements.txt檔案中列出的依賴項
AWS Lambda 有一個名為 Layers 的功能,您可以在其中上傳壓縮的二進制檔案來擴展標準的核心 python3 庫。
總之:
我不明白如何上傳我的壓縮 python3.9 專案。
我是否在 AWS Lambda 層中單獨上傳這些依賴項?
或者在 virtualenv 中壓縮我的檔案會處理依賴關系嗎?
很像 Docker 容器?virtualenv 附帶編譯器/解釋器和依賴項?
uj5u.com熱心網友回復:
按照此處的“操作方法”將您的 Python 代碼/依賴項升級到 3.9:https : //docs.python.org/3/howto/pyporting.html
雖然可以使用 Docker 映像(至少目前仍由 AWS 提供)來部署 2.7 代碼,但這不是一個長期解決方案,您幾乎肯定會投入更多作業來實作它。
對于您的其他問題
打包一個棄用的python 2.7版本
虛擬環境不會讓你這樣做。有這樣的工具pyenv,但它們不適用于 Lambda,因為用于運行 Lambda 的 Python 版本是 Lambda 配置的一部分,無法替換。
打包requirements.txt檔案中列出的依賴項
是的,這就是虛擬環境的用途。當您激活虛擬環境并運行時pip install,它會將軟體包安裝到lib虛擬環境中的目錄中。
要生成 Lambda 部署包,您必須將源代碼與已安裝的包一起壓縮。使這更具挑戰性,這些包實際上安裝在 中lib/python3.9/site-packages/,而 Lambda 不想看到該路徑;在構建 ZIP 時切換到目錄。
這是用于生成 Python 包的官方檔案:https : //docs.aws.amazon.com/lambda/latest/dg/python-package.html
我是否在 AWS Lambda 層中單獨上傳這些依賴項?
您可以,但這僅在您要共享 Lambda 之間的依賴項時才有用。否則,它會增加部署的復雜性,但收益甚微。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360921.html
標籤:Python 亚马逊网络服务 aws-lambda 容器 虚拟环境
