python – PyCharm项目文件夹recs的ModuleNotFoundError错误
我正在PyCharm开展一个项目.该项目具有以下结构:
/projectRoot/ folder1/ somecode.py utils/ __init__.py myutils1.py 我想知道如何进行导入,以便在以交互方式在pyCharm控制台中运行代码时导入工作,以及在使用 python somecode.py 终端中的命令. 目前我这样做: 来自utils.myutils1.py导入myClass 但命令行我得到错误:
并在PyCharm上:
有关项目中模块的正确文件夹结构的任何建议,以及如何正确导入它们? 谢谢! 解决方法
为了解释答案,我重新创建了你拥有的项目结构
/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.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在代码中配置为RUN时,您有两个类似的选项. 我们可以将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控制台不同. 重要的提示: 如果使用远程解释器选项运行python控制台选项pycharm将失败.这是因为它将附加本地PC的路径而不是远程服务器的路径. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |