PyCharm 项目文件夹记录出现 ModuleNotFoundError 错误

ModuleNotFoundError error with PyCharm project folder recs

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

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

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

的代码
python somecode.py 

终端中的命令。

目前我是:

from utils.myutils1.py import myClass

但是命令行我得到错误:

File "somecode.py", line 10, in from utils.myutils1 import myClass ModuleNotFoundError: No module named 'utils'

以及 PyCharm:

Traceback (most recent call last): File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "", line 1, in from utils.myutils1 import myClass ModuleNotFoundError: No module named 'utils'

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

谢谢!

您可以在 folder1 文件夹中使用 utils 包:

那么代码将以任何一种方式工作:

from utils.myutils1 import myClass

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

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

somecode.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 控制台时,会使用首选项执行一些代码。

如您所见,有两个选项

[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 终端。

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 控制台不同。

重要提示: Python 控制台在远程解释器上使用 PyCharm。

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

此处出现类似错误,这似乎对我有用:

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

'File > Settings > Project ____ > Project Interpreter'

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

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