Python调用自定义模块方法有啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python调用自定义模块方法有啥相关的知识,希望对你有一定的参考价值。
import语句
自定义模块可以采用import语句来进行引入,其操作步骤是先导入模块,再调用模块中包含的函数,可将自定义模块放入当前目录,便于解释器路径搜索,以下是导入自定义hello.py模块,并调用World函数的实例:
#!/usr/bin/python
#-*- coding: UTF-8 -*-
#导入模块
import hello
#现在可以调用模块里包含的函数了
support.print_func("World")
输出结果为:
Hello World!
以上实例也可以采用from…import的方法进行实现,是指从一个模块中导入指定的部分到当前命名空间中,以上功能可写成:
#!/usr/bin/python
#-*- coding: UTF-8 -*-
from hello import World
如果要将模块中的所有内容全部导入当前命名空间,可采用from…import*的方法,具体实例如下:
#!/usr/bin/python
#-*- coding: UTF-8 -*-
from hello import *
还需注意,当要导入一个模块时,Python解释器会对模块的位置进行搜索,具体搜索顺序规律如下:
1.当前目录;
2.如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录;
3.如果都找不到,Python会察看默认路径。
参考技术A Python模块是一个Python文件,以.py结尾,包括了Python对象定义和Python语句,能让Python代码段更有逻辑性、更好用、更易懂,既然Python模块有这么多好处,那么该如何引用Python模块呢?import语句
自定义模块可以采用import语句来进行引入,其操作步骤是先导入模块,再调用模块中包含的函数,可将自定义模块放入当前目录,便于解释器路径搜索,以下是导入自定义hello.py模块,并调用World函数的实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 导入模块
import hello
# 现在可以调用模块里包含的函数了
support.print_func("World")
输出结果为:
Hello World!
以上实例也可以采用from…import的方法进行实现,是指从一个模块中导入指定的部分到当前命名空间中,以上功能可写成:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from hello import World
如果要将模块中的所有内容全部导入当前命名空间,可采用from…import*的方法,具体实例如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from hello import *
还需注意,当要导入一个模块时,Python解释器会对模块的位置进行搜索,具体搜索顺序规律如下:
1. 当前目录;
2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录;
3. 如果都找不到,Python会察看默认路径。
调用自定义模块出现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调用自定义模块方法有啥的主要内容,如果未能解决你的问题,请参考以下文章