Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python脚本在PyCharm中工作,但在terminal中不工作_Python_Python 3.x_Cmd_Pycharm - Fatal编程技术网

Python脚本在PyCharm中工作,但在terminal中不工作

Python脚本在PyCharm中工作,但在terminal中不工作,python,python-3.x,cmd,pycharm,Python,Python 3.x,Cmd,Pycharm,我当前正在尝试从其他文件夹导入一个模块。 像这样 from Assets.resources.libs.pout import Printer, ForeColor, BackColor 这个导入方法在PyCharm中工作得非常好,但是,当我尝试在cmd或IDLE中启动文件时,我得到了这个错误 ModuleNotFoundError: No module named 'Assets' 这是我从main.py到pout.py的文件结构: - Assets - main.py - res

我当前正在尝试从其他文件夹导入一个模块。 像这样

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
有没有关于我如何解决这个问题的线索?
感谢您的帮助

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

sys.path.append('path_to_Assets')
但更多细节请阅读下文

原始答案

在运行脚本的两种方法中,可以从中加载模块的路径将有所不同

如果你加上

import sys
print(sys.path)
在导入之前的脚本顶部,您应该能够看到差异

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

以编程方式添加此路径在所有情况下都能正常工作并不是件小事,因为与PyCharm不同,您的脚本没有顶层应该在哪里的概念。但是,如果您知道将从顶层运行脚本,即您的工作目录将是包含资产的文件夹,并且您正在运行类似于
python资产/main.py
的内容,那么您可以执行以下操作:

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

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

Pycharm与否,它将只在
Assets
的父目录中工作。非常感谢@Kemp!我在导入上面添加了
sys.path.append(“”“)
,现在它可以在IDLE和cmd中工作!如果我开始做另一个这样的项目,我会记住这个答案。另外,很抱歉没有投票,我还没有足够的代表来做这件事。