python-3.x - 为什么我得到 : Unable to import module 'handler' : No module named 'paramiko' ?

标签 python-3.x amazon-web-services aws-lambda serverless

我需要使用 aws-lambda 将文件从 SFTP 服务器移动到我的 AWS 账户, 然后我找到了这篇文章:

https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/

谈论 paramiko 作为 SSH 客户端候选者以通过 ssh 移动文件。

然后我用 python 编写了这个 calss 包装器,以便从我的无服务器处理程序文件中使用:

import paramiko
import sys

class FTPClient(object):

    def __init__(self, hostname, username, password):
        """
        creates ftp connection
            Args:
                hostname (string): endpoint of the ftp server
                username (string): username for logging in on the ftp server
                password (string): password for logging in on the ftp server
        """

        try:
            self._host = hostname
            self._port = 22

            #lets you save results of the download into a log file.
            #paramiko.util.log_to_file("path/to/log/file.txt")
            self._sftpTransport = paramiko.Transport((self._host, self._port))
            self._sftpTransport.connect(username=username, password=password)
            self._sftp          = paramiko.SFTPClient.from_transport(self._sftpTransport)
        except:
            print ("Unexpected error" , sys.exc_info())
            raise

    def get(self, sftpPath):
        """
        creates ftp connection
            Args:               
                sftpPath = "path/to/file/on/sftp/to/be/downloaded"
        """

        localPath="/tmp/temp-download.txt"

        self._sftp.get(sftpPath, localPath)
        self._sftp.close()

        tmpfile = open(localPath, 'r')

        return tmpfile.read()


    def close(self):
        self._sftpTransport.close()

在我的本地机器上它按预期工作(test.py):

import ftp_client


sftp = ftp_client.FTPClient(
    "host", 
    "myuser",
    "password")

file = sftp.get('/testFile.txt')


print(file)

但是当我用无服务器部署它并运行 handler.py 函数(与上面的 test.py 相同)时,我得到了错误:

 Unable to import module 'handler': No module named 'paramiko' 

看起来部署无法导入 paramiko(根据上面的文章,它似乎应该可用于 AWS 上的 lambda python 3),不是吗?

如果不是,这种情况下的最佳做法是什么?我应该将该库包含到我的本地项目中并将其打包/部署到 aws 吗?

最佳答案

全面的指南教程位于:

https://serverless.com/blog/serverless-python-packaging/

使用 serverless-python-requirements 包 作为无服务器节点插件。

在部署到 AWS lambda 之前,需要创建一个虚拟环境和 Docker Deamon 来打包您的无服务器项目

关于python-3.x - 为什么我得到 : Unable to import module 'handler' : No module named 'paramiko' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51970095/

相关文章:

amazon-web-services - AWS Lambda - 使用 .NET Core 构建无服务器 API

amazon-web-services - 使用 Lambda 容器时,AWS Lambda 函数计费持续时间还包括初始化持续时间吗?

python - 根据最后一次出现的情况计算前面零的数量

python - 除了某些字段外,如何检查 2 个字典是否相等?

amazon-web-services - Lambda 访问互联网的 Cloudformation 导致超时

amazon-web-services - Serverless.com 与 Bitbucket Pipelines

python - Pytest 找不到 Lambda 层中定义的函数

python-3.x - 无法在Mac 10.14.3中安装python 3.7包Fiona,lxml,pandas,Pillow

python - 如何处理 Pandas 中的多值线终止符

amazon-web-services - Azure Web 应用程序和 Azure ad http 错误 500.79 内部服务器错误