python项目结构 pycharm_python – PyCharm项目文件夹recs的ModuleNotFoundError错误
我正在PyCharm开展一个项目.该项目具有以下结构:/projectRoot/folder1/somecode.pyutils/__init__.pymyutils1.py我想知道如何进行导入,以便在以交互方式在pyCharm控制台中运行代码时导入工作,以及在使用python somecode.py终端中的命令.目前我这样做:来自utils.myutils1.py导入myClass但命令行我得到
我正在PyCharm开展一个项目.该项目具有以下结构:
/projectRoot/
folder1/
somecode.py
utils/
__init__.py
myutils1.py
我想知道如何进行导入,以便在以交互方式在pyCharm控制台中运行代码时导入工作,以及在使用
python somecode.py
终端中的命令.
目前我这样做:
来自utils.myutils1.py导入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’
有关项目中模块的正确文件夹结构的任何建议,以及如何正确导入它们?
谢谢!
解决方法:
为了解释答案,我重新创建了你拥有的项目结构
/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
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
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
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控制台.
如果使用远程解释器选项运行python控制台选项pycharm将失败.这是因为它将附加本地PC的路径而不是远程服务器的路径.
为了解决这个问题,必须在本地PC目录和远程服务器路径之间添加映射.


标签:python,python-import
来源: https://codeday.me/bug/20190714/1458039.html
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐




所有评论(0)