Python PyCharm项目文件夹记录的ModuleNotFoundError错误

Python PyCharm项目文件夹记录的ModuleNotFoundError错误,python,python-import,Python,Python Import,我在PyCharm做一个项目。该项目的结构如下: /projectRoot/ folder1/ somecode.py utils/ __init__.py myutils1.py 我想知道如何进行导入,以便在pyCharm控制台中以交互方式运行代码时,以及在使用 python somecode.py 终端中的命令 目前我有: 从utils.myutils1.py导入myClass 但是命令行我得到了一个错误: 文件“somecode.

我在PyCharm做一个项目。该项目的结构如下:

/projectRoot/
   folder1/
       somecode.py
   utils/
       __init__.py
       myutils1.py
我想知道如何进行导入,以便在pyCharm控制台中以交互方式运行代码时,以及在使用

python somecode.py 
终端中的命令

目前我有:

从utils.myutils1.py导入myClass

但是命令行我得到了一个错误:

文件“somecode.py”,第10行,在 从utils.myutils1导入myClass ModuleNotFoundError:没有名为“utils”的模块

关于PyCharm:

回溯(最近一次调用上次):文件 “/home/ubuntu/anaconda3/lib/python3.6/site packages/IPython/core/interactiveshell.py”, 运行代码中的第2881行 exec(代码为obj,self.user\u全局,self.user\n)文件“”,第1行,在 从utils.myutils1导入myClass ModuleNotFoundError:没有名为“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)
myclass="tarun"
myutils1.py

from utils.myutils1 import myclass

if __name__ == "__main__":
   print(myclass)
myclass="tarun"
从pycharm运行它们没有任何问题,但从终端运行它们将产生以下错误

  File "somecode.py", line XX, in <module>
    from utils.myutils1 import myclass
ModuleNotFoundError: No module named 'utils'
还有一个开始脚本。这样做的目的是将项目的根添加到python的路径中。它由两种主要方式控制
sys.path
PYTHONPATH
环境变量

如果我在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'
如您所见,
folder1
已添加到
sys.path
,因为它是包含
somecode.py
的文件夹,但尚未添加根文件夹。终端中的修复很简单,即在PYTHONPATH中设置根目录路径

PYTHONPATH=`pwd`/.. python somcode.py
现在代码也将在终端上运行

但是它们的工作方式不同于Python控制台

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

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

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

确保项目解释器设置为,例如:
C:\Python36\python.exe
(在我的例子中),而不是某个地方或其他地方的副本

'文件>设置>项目__;>项目解释器'

或者,长话短说,如果该路径不配合,也可以尝试查找
workspace.xml
,并在启动PyCharm之前手动更改
SDK\u HOME

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


右键单击projectRoot,然后选择将目录标记为、源root@JoranBeasley谢谢我这样做了,但我仍然得到相同的错误…您使用的是哪一个python版本?问题是,我希望能够从许多其他文件夹中使用它,因此如果它可以位于文件夹1之外和项目根目录内部,则会更好。用示例进行了很好的解释。这应该是可以接受的answer@Tarun,很好的答案现在可以在命令行中使用了。然而,我的pycharm仍然不起作用。我更接近于理解为什么,但我无法修复它。我正在运行pycharm远程模式。例如,远程python 3.6.1,它连接到Ubuntu linux服务器。默认情况下,第一步是#导入系统;打印(“%s%”(sys.version,sys.platform)上的Python%s)#sys.path.extend([WORKING_DIR_和_Python_path]),将文件夹本地pc而非远程服务器添加到路径。我在服务器上也有代码副本。。所以我试着导入sys;sys.path.extend(“/home/DSProjectCode/”),但它在这个远程配置上不起作用。没有任何想法来修复最后一个远程模式问题,我已经准备好了。。。谢谢你的帮助@TarunLalwani非常感谢,期待着您的想法。@TarunLalwani我设法修复了它,非常感谢!我编辑了答案,并对远程配置需要进行的修复进行了评论,并接受了答案。