热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Python3在AWSlambda上出现sqlite3错误

如何解决《使用Python3在AWSlambda上出现sqlite3错误》经验,为你挑选了3个好方法。

我正在构建一个python 3.6AWS Lambda部署包,并面临着一个问题SQLite.

在我的代码中,我使用的是nltk其中一个import sqlite3文件.

到目前为止的步骤:

    部署包只有我在根目录中使用的python模块.我收到错误: Unable to import module 'my_program': No module named '_sqlite3'

    将_sqlite3.so添加/home/my_username/anaconda2/envs/py3k/lib/python3.6/lib-dynload/_sqlite3.so到包根目录中.然后我的错误改为:

    Unable to import module 'my_program': dynamic module does not define module export function (PyInit__sqlite3)

    将SQLite预编译的二进制文件添加sqlite.org到我的包的根目录,但我仍然得到错误点#2.

我的设置:Ubuntu 16.04,python3 virtual env

AWS lambda env: python3

我该如何解决这个问题?



1> AusIV..:

根据您使用NLTK所做的事情,我可能找到了解决方案.

基本nltk模块导入了许多依赖项,其中许多依赖项未被其功能集的大部分使用.在我的用例中,我只使用了nltk.sent_tokenize,它对sqlite3没有任何功能依赖,即使sqlite3作为依赖项导入.

通过更改,我能够使我的代码在AWS Lambda上运行

import nltk

import imp
import sys
sys.modules["sqlite"] = imp.new_module("sqlite")
sys.modules["sqlite3.dbapi2"] = imp.new_module("sqlite.dbapi2")
import nltk

这为sqlite和动态创建空模块sqlite.dbapi2.当nltk.corpus.reader.panlex_lite尝试导入sqlite,这将让我们的空模块,而不是标准库版本.这意味着导入将成功,但这也意味着当nltk尝试使用sqlite模块时它将失败.

如果您正在使用任何实际依赖于sqlite的功能,我恐怕无法帮助.但是如果你正在尝试使用其他nltk功能并且只需要避免缺少sqlite,那么这种技术可能会起作用.



2> FlipperPA..:

这有点像黑客,但我已经通过将_sqlite3.soCentOS 7上的Python 3.6文件直接放入使用Zappa部署到AWS的项目的根目录来实现这一点.这应该意味着,如果您可以_sqlite3.so直接包含在ZIP的根目录中,它应该可以工作,因此可以通过以下行导入cpython:

https://github.com/python/cpython/blob/3.6/Lib/sqlite3/dbapi2.py#L27

不漂亮,但它的工作原理.你可以在_sqlite.so这里找到一份副本:

https://github.com/Miserlou/lambda-packages/files/1425358/_sqlite3.so.zip

祝好运!



3> apathyman..:

这不是解决方案,但我有一个解释原因.

Python 3在标准库中支持sqlite(稳定到点知道并且不允许安装pysqlite).但是,此库要求sqlite开发人员工具(C libs)在运行时位于计算机上.亚马逊的Linux AMI默认没有安装这些,这是AWS Lambda运行的(裸ami实例).我不确定这是否意味着没有安装sqlite支持,或者只是在添加库之后才会工作,因为我以错误的顺序测试了一些东西.

Python 2不支持标准库中的sqlite,你必须使用像pysqlite这样的第三方库来获得支持.这意味着可以更轻松地构建二进制文件,而不依赖于机器状态或路径变量.

我的建议,我已经完成了,我只是在python 2.7中运行该函数(如果可以的话)(并使你的单元测试更加困难:/).

由于这些限制(它是3中融入python的基础库的东西),因此创建一个lambda友好的部署包更加困难.我唯一可以建议的是请求AWS向lambda添加支持,或者(如果你可以在没有实际使用 nltk中的sqlite片段的情况下逃脱)通过放置具有正确方法和属性的空白库来复制anaconda但是不要实际上做任何事.

如果您对后者感到好奇,请查看fake/_sqlite3anaconda安装中的任何文件.这个想法只是为了避免导入错误.


推荐阅读
  • 从零开始的ESP8266探索(15)WiFi其他方法和WiFi事件响应
    文章目录目的WiFi其他方法WiFi事件响应事件列表注册事件使用示例总结目的WiFi在使用过程中并非会一直如希望般稳定运行的,为了应对这些情况就需要能够了解WiFi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • OpenCV4.5.0+contrib编译流程及解决错误方法
    本文介绍了OpenCV4.5.0+contrib的编译流程,并提供了解决常见错误的方法,包括下载失败和路径修改等。同时提供了相关参考链接。 ... [详细]
author-avatar
herozhx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有