【问题标题】:Python script works in PyCharm but not in terminalPython 脚本在 PyCharm 中有效,但在终端中无效
【发布时间】:2020-11-26 16:11:20
【问题描述】:

我目前正在尝试从另一个文件夹导入我的一个模块。 像这样……

from Assets.resources.libs.pout import Printer, ForeColor, BackColor

此导入方法在 PyCharm 中完全正常,但是,当我尝试在 cmd 或 IDLE 中启动文件时,我收到此错误。

ModuleNotFoundError: No module named 'Assets'

这是我从 main.py 到 pout.py 的文件结构:

- Assets
  - main.py
  - resources
    - libs
      - pout.py

关于我如何解决这个问题的任何线索? 任何帮助表示赞赏!

【问题讨论】:

  • Pycharm与否,只能在Assets的父目录下工作。

标签: python python-3.x cmd pycharm


【解决方案1】:

编辑:最初的答案是基于您正在运行的脚本在给定的文件夹结构内的假设,重新阅读告诉我可能不是真的。一般的解决办法是做

sys.path.append('path_to_Assets')

但请阅读下文了解更多详情。

原答案

可以加载模块的路径在两种运行脚本的方法之间会有所不同。

如果你添加

import sys
print(sys.path)

在导入之前到脚本的顶部,您应该能够看到差异。

当您自己运行它时,第一个条目将是脚本本身的位置,然后是各种系统/环境路径。当您在 PyCharm 中运行它时,您将看到相同的第一个条目,然后是项目顶层的条目。这是从 PyCharm 运行时查找模块的方式。此行为由运行配置中的“将内容根添加到 PYTHONPATH”选项控制。

以一种适用于所有情况的方式以编程方式添加此路径并非易事,因为与 PyCharm 不同,您的脚本没有顶层应该在哪里的概念。但是,如果您知道您将从顶层运行脚本,即您的工作目录将是包含资产的文件夹并且您正在运行类似 python Assets/main.py 的东西,那么您可以这样做

sys.path.append(os.path.abspath('.'))

这会将正确的文件夹添加到路径中。

【讨论】:

  • 感谢一百万 @Kemp !我在导入上方添加了sys.path.append('<path to assets folder>''),现在它可以在 IDLE 和 cmd 中使用!如果我开始从事另一个结构类似的项目,我会记住这个答案。
  • 另外,很抱歉没有投票,我还没有足够的代表来投票。
猜你喜欢
  • 2016-09-19
  • 2021-12-23
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多