在 Heroku 但不是在本地出现错误“ImportError: No module named”

Posted

技术标签:

【中文标题】在 Heroku 但不是在本地出现错误“ImportError: No module named”【英文标题】:Getting error "ImportError: No module named" on Heroku but not locally 【发布时间】:2017-05-15 17:44:45 【问题描述】:

当我尝试将我的应用程序部署到 heroku 但应用程序在本地构建良好时,我收到了ImportError: No module named。这是 Heroku 的日志

Traceback (most recent call last):
File "mr_meeseeks.py", line 4, in <module>
    import Helpers.Plugin_Handler as Plugin_Handler
File "/app/Helpers/Plugin_Handler.py", line 5, in <module>
    from Utils.constants import Plugin_Type
ImportError: No module named 'Utils.constants'

这是我的文件结构:

据我所知,Utils/constants.py 存在。如果它是相关的,这是一个 SlackBot。其余代码可以在here找到。

【问题讨论】:

我很惊讶它没有在本地抛出错误,Utils 与 Helpers 不在同一个模块中。您能否在本地删除所有__pycache__ 并重试?另外你怎么知道它没有在本地失败?您是否尝试过产品步骤,或者您是根据您的测试这么说的。说到你的测试没有签入:) @plumSemPy 遗憾的是,我还没有任何测试。我知道它不会在本地失败,因为我可以运行 python mr_meeseeks.py 并且它不会像在 Heroku 上那样崩溃。 Slackbot 还将按预期响应消息。我的 Procfile 的内容是worker: python mr_meeseeks.py,所以就我所知,这两者应该是等价的。我删除了__pycache__ 文件,但它仍然没有在本地崩溃。你问的是这个吗? 是的,Plugin_Handler 中的导入不应该起作用,因为 Utils 与 Plugin_Handler 不在同一个模块(目录)中,这让我觉得有些东西被缓存了。能否请您尝试删除所有.pyc 文件?我正在尝试在本地重现您的产品错误 是的。删除 .pyc 文件并在本地重新运行。仍然工作正常。 见下面@noɥʇʎԀʎzɐɹƆ的回答。此外,您的 github 中有一个 utils,其中包含 constants,然后是一个没有任何内容的 Utils。两个文件夹。 【参考方案1】:

Python 解释器在 $PYTHONPATH 环境变量下查找模块。看起来您或您的编辑器(当我将目录标记为源时,我的编辑器会这样做)root 已将 SlackBot/ 添加到 $PYTHONPATH

当我将目录标记为源根目录时,我自己也遇到了这个错误。

你有几个选择:

使机器人启动脚本将SlackBot/ 附加到$PYTHONPATH 使用相对导入 - from ..Utils import constants Dynamically add SlackBot/ to the sys.path variable

另外,关于风格的说明:python 类应该是CamelCase,python 模块应该是lowercase_with_underscores。如果你有像 PyCharm 这样的编辑器,你的编辑器可以自动修复这些问题,等等。

PEP 8 是官方的 Python 风格指南,尽管我建议使用 linter,以便自动检测和修复这些问题。

【讨论】:

here 给出的解决方案能解决我的问题吗? @TWOF 是的,它也附加到 PYTHONPATH。 (别忘了投赞成票!:))【参考方案2】:

在您的 Procfile 中,将 Slackbot 附加到 PYTHONPATH,尝试添加

--pythonpath SlackBot

作为论据。这个link 也解决了完全相同的问题。

【讨论】:

以上是关于在 Heroku 但不是在本地出现错误“ImportError: No module named”的主要内容,如果未能解决你的问题,请参考以下文章

isBlank() 在本地工作,但是在推送到 heroku 时:找不到符号

Knex 与 Heroku Postgres 连接出现错误?

Gradle projet,在heroku上部署期间出现错误NoSuchMethodException

heroku中的django应用程序出现工作超时错误

Heroku:错误:找不到模块 node-gyp

在 Cloud Build 上部署到 AppEngine 失败 -- 但不是在本地