没有名为“email.FeedParser”的模块

Posted

技术标签:

【中文标题】没有名为“email.FeedParser”的模块【英文标题】:No module named 'email.FeedParser' 【发布时间】:2019-06-28 08:10:57 【问题描述】:

我正在尝试在 AWS Lambda 上运行代码,但它返回错误:“无法导入模块 'main':没有名为 'email.FeedParser' 的模块”。

我的代码没有使用电子邮件 feedparser 模块或函数。它只需连接到一个 Google API 并下载 CSV 报告。

我检查了我的代码范围,这个模块的引用是由 httplib2 库和 python 标准库的 email/parser.py 完成的。

requirements.txt 文件中的所有必需库都已完全更新。该代码还由 samTemplate.yaml 文件配置为在 aws 的 python 3.7 环境中执行。

你们以前遇到过这个问题吗?我该如何解决?

谢谢!

import httplib2
from googleapiclient import discovery
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import run_flow
from urllib.parse import urlencode
import requests
import json
import time as t
import pandas as pd
from datetime import datetime, timedelta
from calendar import monthrange
from dateutil.relativedelta import relativedelta

【问题讨论】:

你有没有机会在本地使用python2?您是如何创建上传到 Lambda 的部署包(.zip 存档)的? httplib2 的 py3 版本中没有 email.FeedParser,但它的 py2 版本中有一个(请参阅 github.com/httplib2/httplib2/…)我认为这是问题的原因 - 您正在将 py2 兼容代码上传到 py3 容器。跨度> 您好米兰,非常感谢您的回答。我不在我的项目中使用 python2。这个项目有一个python 3.7.1的虚拟环境。我已经检查过,httplib2 上有一个“import email.feedparser”行。同样在 python 标准库(在 email/parser.py 中)它被称为“从 email.feedparser 导入 FeedParser”。 您在错误消息中提到了email.FeedParser(注意 CamelCase 名称)。这将建议 py2 版本的 httplib。那么错误信息是否正确? 是的!错误消息是:。我不知道为什么 AWS 会调用 httplib2 的 py2 版本。在这一点上您完全正确,但是 AWS 可以在 Python 2.7 和 Python 3.6/3.7 中执行它。 requirements.txt 文件包含所有这些库的最新版本。 只是为了确保 - 您的 Lambda 配置为使用 py 3.6/3.7 而不是 2.7,对吗? 【参考方案1】:

我必须确保 pip3 实际安装到 python3 而不是 python2。 而不是:

pip3 install <package>

我必须这样做:

python3.8 -m pip install <package>

在此处查看答案:Why pip3 install in python2 sitepackages

【讨论】:

【参考方案2】:

我也遇到了同样的问题……

我这样做了:

    vim ~/.pydistutils.cfg

    [安装]

    前缀=

请参阅此处:24257803 了解有关此步骤的更多信息

    rm -rf [dependencies_dir]

    pip3 install -r requirements.txt --target [dependencies_dir]

Pip3 会将此依赖项安装到 Python3,而 pip 将安装到 Python2(其中一些包不存在)。因此,当通过无服务器部署到 Lambda 时,不包含这些包。

【讨论】:

非常感谢分享,我去试试!

以上是关于没有名为“email.FeedParser”的模块的主要内容,如果未能解决你的问题,请参考以下文章

macOS 上的“ModuleNotFoundError:没有名为 'dbus' 的模块”

ModuleNotFoundError:没有名为“推理”的模块

为啥 ImportError:没有名为 lightgbm 的模块

导入错误,没有名为'jwt'的模块。没有名为 "jwt "的模块

导入错误:没有名为“TkTreectrl”的模块 [重复]

ModuleNotFoundError:没有名为“dataviz”的模块