调用自定义模块出现ModuleNotFoundError的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用自定义模块出现ModuleNotFoundError的问题相关的知识,希望对你有一定的参考价值。

参考技术A Python会在以下路径中搜索它想要寻找的模块:

1,程序所在的文件夹

2,标准库的安装路径

3,操作系统环境变量PYTHONPATH所包含的路径

产生问题的原因可能是: IDE(我使用的是Pycharm)没有将当前目录添加到工作目录中,导致了在搜索的目录中找不到要调用的模块。

解决方法1:在调用自定义模块前先将程序所在的目录添加到工作目录中

例如 这里的preprocess.py是我们自定义的模块 ,已经将其放在同一目录下

解决方法2:在Pycharm中创建NewProject,将调用程序与被调用程序放在同一个Project中。

此时Pycharm会自动生成.idea和__pycache__两个文件夹,模块的调用应该和这个有关,然后在程序中直接调用自定义的模块就可以了。

红色划线部分是调用的python解析器的位置。可能在用pycharm调用的时候这些模块都是能正常使用的。但是,为什么到了vscode这儿就出问题了呢?

首先,让我们来看看现在有哪些模块,在命令行终端输入conda list。

可以看见torch模块确实已经安装了,不过请注意后面还有个pypi。pypi是指这个模块是通过pip安装的,而不是通过conda安装。所以模块无法调用的原因就在这儿。

解决方法比较简单粗暴,在选择python解析器的时候选择conda base版本的就OK了。在这个解析器下,即使是pip安装的模块也可以照常使用。

1、因为默认的路径不在根目录了,而以 当前运行的程序文件夹为根目录

2、如果在当前文件目录底下可以找到导入的包,那么可以直接使用from … import …

3、如果在当前文件目录底下找不到导入的包,则需要向sys.path添加包的所在的绝对位置。

最后补充一下我的问题是怎么解决的:

在了解了路径原理之后,仔细核对了出问题的路径之后,发现from … import …的时候,from目录不是从根目录开始的,修改之后修复bug

为啥在Python中我自定义的模块路径无效呢?

比如,我自己写了一个模块,假定存储在D:\PythonTest文件夹下,然后我要在另一个模块中调用这个模块,为什么我的指定Path代码不能正确指定呢??
代码如下:
import os
import sys
moudulepath=os.getcwd()+'D:\\PathonTest'
sys.path.append(modulepath)
print sys.path
问题是我print的时候能看到路径已经添加进去了,可为什么我一调用的时候还是报错呢?
恳求高人指点一下!谢谢
还有我用的版本是Python2.7和Pythonwin

直接sys.path.append('D:\\PathonTest')。
你加到路径里的是'F:\\Program Files\\PythonF:\\PathonTest',这个是个错误路径啊。
os.getcwd()是获得当前程序运行的路径,如果这句话不是在某个脚本中运行而是直接在IDLE中写的,那得到的就是Python IDLE的路径。不需要加和'D:\\PathonTest'加到一起(不明白为什么要两个路径加一下),而且也不需要sys.path.append(os.getcwd()),Python IDLE的路径肯定已经在path里面了,不需要重复加入。
参考技术A moudulepath=os.getcwd()+'D:\\PathonTest'
sys.path.append(modulepath)
问题在这两句吧。第一句生成的不是一个有效的目录。如果你是想把当前目录及d:\PathTest加入到sys.path。应该这样做:
sys.path.append(os.getcwd())
sys.path.append('D:\\PathTest')
参考技术B 模块需要放到PAYTHON 的模块目录里面。

以上是关于调用自定义模块出现ModuleNotFoundError的问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥在Python中我自定义的模块路径无效呢?

Python调用自定义模块方法有啥

七天学会Python基础-第七天3/3-自定义模块和random模块

Python调用自定义模块方法有什么?

Python调用自定义模块方法有什么?

未从自定义 joomla 组件调用自定义面包屑模块