PyCharm项目文件夹recs出现ModuleNotFoundError错误

时间:2017-09-21 23:05:43

标签: python python-import

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

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

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

运行代码时
python somecode.py 
终端中的

命令。

目前我这样做:

from utils.myutils1.py import myClass

但命令行我得到错误:

  

文件" somecode.py",第10行,in       来自utils.myutils1 import myClass ModuleNotFoundError:没有名为' utils'

的模块

和PyCharm:

  

Traceback(最近一次调用最后一次):文件   " /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行,in       来自utils.myutils1 import myClass ModuleNotFoundError:没有名为' utils'

的模块

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

谢谢!

3 个答案:

答案 0 :(得分:15)

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

from utils.myutils1 import myclass

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

<强> somecode.py

myclass="tarun"

<强> myutils1.py

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

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

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

问题是Pycharm为你做的事情很少,因为你没有意识到为什么它不在终端工作。所以在告诉你需要什么之前,我会告诉你PyCharm自己做的两件事。

Python控制台

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

Python Console

正如您所看到的,有两个选项

sys.path

然后是一个起始脚本。所以它的作用是将项目的根添加到python的路径中。这由两个主要方式PYTHONPATH>>> 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'] 环境变量

控制

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

'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27'

如您所见,somecode.py被添加到Python终端。

Python配置

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

Run configurations

我们可以将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,因为它是包含PYTHONPATH=`pwd`/.. python somcode.py 的文件夹,但尚未添加根文件夹。终端中的修复很简单,即在PYTHONPATH中设置根目录路径。

{{1}}

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

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

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

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

答案 1 :(得分:0)

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

enter image description here

然后代码将以任何方式工作:

from utils.myutils1 import myClass

答案 2 :(得分:0)

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

确保将Project Interpreter设置为例如C:\Python36\python.exe (在我的情况下),而不要设置为其他任何地方的副本。

“文件>设置>项目____>项目解释器”

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

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