PyCharm项目文件夹recs的ModuleNotFoundError错误

2024-05-23 01:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在皮查姆做一个项目。项目结构如下:

/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'

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

谢谢!


Tags: 项目noinfrompyimportlinemyclass
3条回答

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

enter image description here

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

from utils.myutils1 import myClass

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

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

'文件>设置>项目>项目解释程序'

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

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

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

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

Python Console

如你所见,有两种选择

[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配置为在代码中运行时,有两个类似的选项。

Run configurations

我们可以把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的文件夹,但根文件夹尚未添加。终端中的修复很简单,就是在PYTHONPATH中设置根目录路径。

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

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

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

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

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

相关问题 更多 >

    热门问题