PyCharm 项目文件夹 recs 的 ModuleNotFoundError 错误

新手上路,请多包涵

我正在 PyCharm 中从事一个项目。该项目具有以下结构:

 /projectRoot/
   folder1/
       somecode.py
   utils/
       __init__.py
       myutils1.py

我想知道如何进行导入,以便在以交互方式在 pyCharm 控制台中运行代码时以及使用

python somecode.py

终端中的命令。

目前我这样做:

from utils.myutils1.py import myClass

但是命令行我得到错误:

文件“somecode.py”,第 10 行,来自 utils.myutils1 import myClass ModuleNotFoundError: No module named ‘utils’

在 PyCharm 上:

回溯(最近调用最后):文件“/home/ubuntu/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py”,第 2881 行,在 run_code exec(code_obj, self.user_global_ns, self .user_ns) 文件“”,第 1 行,在 from utils.myutils1 import myClass ModuleNotFoundError: No module named ‘utils’

关于项目中模块的正确文件夹结构以及如何正确导入它们的任何建议?

谢谢!

原文由 Dnaiel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 851
2 个回答

为了解释答案,我重新创建了您拥有的项目结构

/projectRoot/
   folder1/
       somecode.py
   utils/
       __init__.py
       myutils1.py

一些代码.py

 from utils.myutils1 import myclass

if __name__ == "__main__":
   print(myclass)

myutils1.py

 myclass="tarun"

从 pycharm 运行它们没有任何问题,但是从终端运行它们会产生以下错误

  File "somecode.py", line XX, in <module>
    from utils.myutils1 import myclass
ModuleNotFoundError: No module named 'utils'

问题是 Pycharm 为您做的事情很少,因为您没有意识到为什么它在终端中不起作用。因此,在告诉您需要做什么之前,我将告诉您 PyCharm 自己做的两件事。

Python控制台

当您从 Pycharm 启动 Python 控制台时,会使用首选项执行一些代码。

Python控制台

如您所见,有两个选项

[X] Add content roots to PYTHONPATH
[ ] Add source roots to PYTHONPATH

然后还有一个起始脚本。所以它的作用是将项目的根目录添加到 python 的路径中。它由两种主要方式控制 sys.pathPYTHONPATH 环境变量

如果我在 Python 控制台中运行以下代码

>>> import sys
>>> sys.path
['/Applications/PyCharm.app/Contents/helpers/pydev',
'/Applications/PyCharm.app/Contents/helpers/pydev',
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python27.zip',
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7', ....
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages',
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27']

如您所见 '/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27' 被添加到Python终端。

蟒蛇配置

当您使用 Pycharm 配置为在代码中运行时,您有两个类似的选项。

运行配置

我们可以将 somecode.py 的代码更改为以下

import os
print (os.environ['PYTHONPATH'])

import sys
print (sys.path)

/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27
['/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27/folder1',
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27', ....,
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages']

从输出中我们可以看到 PYTHONPATH 被设置为当前项目文件夹。

从终端运行

现在让我们从终端运行 somecode.py 并进行我们所做的修改。

 $ python somecode.py
Traceback (most recent call last):
  File "somecode.py", line 2, in <module>
    print (os.environ['PYTHONPATH'])
  File "/Users/tarun.lalwani/.virtualenvs/folderstructure27/bin/../lib/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'PYTHONPATH'

所以这表明当我们在终端中运行它时没有 PYTHONPATH 。让我们通过删除 print(os.environ['PYTHONPATH']) 代码再次运行它。您将获得以下输出

['/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27/folder1', ...
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages']
Traceback (most recent call last):
  File "somecode.py", line 7, in <module>
    from utils.myutils1 import myclass
ImportError: No module named utils.myutils1

如您所见, folder1 添加到 sys.path 因为它是包含 somecode.py 的文件夹,但尚未添加根文件夹。 terminal 中的修复很简单,就是在 PYTHONPATH 中设置根目录路径。

 PYTHONPATH=`pwd`/.. python somcode.py

现在代码也可以从终端运行。

但它们的工作方式与 Python 控制台不同。

重要说明: 在远程解释器上使用 PyCharm 的 Python 控制台。

如果使用远程解释器选项运行 python 控制台,pycharm 将失败。这是因为它将附加本地 PC 的路径而不是远程服务器的路径。为了解决这个问题,必须在本地 PC 目录和远程服务器路径之间添加一个映射。 pycharmRemoteConfigpycharmRemoteConfig2

原文由 Tarun Lalwani 发布,翻译遵循 CC BY-SA 3.0 许可协议

类似的错误在这里,这似乎对我有用:

确保 Project Interpreter 设置为,例如: C:\Python36\python.exe (在我的例子中) 而不是某个地方的副本。

‘文件 > 设置 > 项目 ____ > 项目解释器’

或者,长话短说,如果该路由不合作,也可以在启动 PyCharm 之前尝试查找 workspace.xml 并手动更改 SDK_HOME

 <option name="SDK_HOME" value="C:\Python36\python.exe" />

原文由 gseattle 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题