【问题标题】:Getting error "ImportError: No module named" on Heroku but not locally在 Heroku 但不是在本地出现错误“ImportError: No module named”
【发布时间】: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。两个文件夹。

标签: python heroku slack-api slack


【解决方案1】:

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

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

你有几个选择:

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

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

【讨论】:

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

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

--pythonpath SlackBot

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

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 2017-03-16
    • 2013-04-07
    • 2015-04-30
    • 1970-01-01
    • 2017-08-20
    • 2012-08-07
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多