簡體   English   中英

如何使用 Python 在 AWS lambda 上運行 32 位二進制文​​件

[英]How to run 32 bit binaries on AWS lambda using Python

AWS Lambda Python 3.8 運行時表示它可以執行 32 位庫 我有一個用 C 構建的 32 位可執行文件。當我執行以下代碼時 - 我得到:

wrong ELF class: ELFCLASS32

我在 Amazon Linux 2 docker 鏡像上嘗試了同樣的方法。 我得到的錯誤是一樣的。 可能 python 給 CDLL 一個 64 位實例。

使用來自 ubuntu 32bit/ubuntu:16.04的 32 位 docker 鏡像,它工作正常。

import platform 
print(platform.architecture())

我將不得不在 32 位架構中調用 Python。

代碼:

#include <stdio.h>

int foo() {
    printf("Hello, world!\n");
    return 0;
}

蟒蛇代碼:

import ctypes

def lambda_handler(event, context):
    libhi = ctypes.CDLL("my32bitlib.so")
    libhi.foo()

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

lambda_handler(None, None)

我很確定https://aws.amazon.com/about-aws/whats-new/2018/09/amazon-linux-2-now-supports-32-bit-applications-and-libraries/只是意味着他們已經安裝了gcc-multilib等等,所以系統有/usr/lib32/*.so可用,所以你可以運行 32 位二進制可執行文件。 而 32 位進程中的那些 32 位可執行文件可以加載 32 位庫。

他們還沒有發明任何讓您使用來自 64 位 Python 進程的 32 位庫的魔法。 在該進程中執行用戶空間代碼時,CPU 將處於 64 位模式,因此它將無法正確執行 32 位庫中的 32 位 x86 機器代碼。

如果他們將普通的/usr/bin/python切換為 32 位可執行文件,那將破壞 64 位庫。

我認為您對該新聞公告的含義過於樂觀; 它可能與您無關,因為您的程序是用 Python 編寫的。 您不能混合 32 位和 64 位代碼,並且常規python仍然是一個 64 位程序。


他們可能已經安裝了 Python 的 32 位版本,如果您想在 Python 程序中加載舊的 32 位庫,您可以使用它。 也許尋找一個python32目錄或二進制文件,如果這就是他們所說的? 但是,如果您沒有找到任何東西,請不要感到驚訝。

如果是這樣,請將腳本開頭的#!/usr/bin/python行更改為正確的路徑。 或者在 /usr/local 中安裝您自己的 32 位 Python 版本並使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM