python中在一个文件中调用另一个文件的函数

python中在一个文件中调用另一个文件的函数

  • 环境
  • 遇到的问题及解决办法

环境

  • 编辑器:vscode + python

  • 文件路径状况及问题描述:
    现有有一个文件夹top,文件夹top下面有两个文件夹mid1和mid2,文件夹mid1下面有一个python文件button1.py,在button.py中有一个函数print_mid1(),文件夹mid2下有一个python文件button2.py,该如何在button2.py中调用文件夹mid1下的print_mid()函数
    top/
    |-- mid1/
    | |-- button1.py
    |-- mid2/
    | |-- button2.py
    python中在一个文件中调用另一个文件的函数_第1张图片

  • 文件内容:
    button1 :

def print_mid1() :
    print("这里是mid1文件夹下 button1.py文件的 print_mid1()函数")

button2 :

import sys
sys.path.append("E:/aproject/_002_text/top/mid1")
from button1 import print_mid1
if __name__ == "__main__" :
    print_mid1()

遇到的问题及解决办法

  • button1.py文件如下,这里是一个只包含输出的函数
def print_mid1() :
    print("这里是mid1文件夹下 button1.py文件的 print_mid1()函数")
  • 正常无法使用import调用是因为mid1文件夹不在mid2下文件的寻找范围内,所以导致无论是from还是import都无法找到。
  • 这里就是用到了sys,sys 是 Python 的一个标准库模块,它提供了对 Python 解释器的一些变量和与解释器强烈交互的函数的访问。通过 sys 模块,你可以访问与 Python 解释器及其环境交互的一些功能。
  • 使用import来导入sys模块,并使用sys.path.append 方法将目录的路径添加到 sys.path 列表中,这样我们就可以在mid2中找到mid1下的文件
import sys
sys.path.append("E:/aproject/_002_text/top/mid1")
from button1 import print_mid1
  • 但是你会看到这里的button1是波浪线标记的,虽然不影响文件的正常运行,但这也会让大家十分苦恼,究其原因是因为我们没有把文件路径添加到python.analysis.extraPaths配置文件中,这个配置选项允许你指定额外的导入路径,这些路径将用于 Python 语言服务器的静态代码分析。当你有一个不在当前工作目录或 Python 环境 PYTHONPATH 中的模块或包时,你可以使用此选项来告诉语言服务器去哪里查找这些模块。这对于确保代码的正确分析、错误检查、代码导航(如“跳转到定义”)以及其他依赖于代码解析的功能非常有用。
  • 我们可以点开vscode的设置,并搜索python.analysis.extraPaths,然后把路径添加到里面,如下,这时button1下的波浪线提示就会消失
{
    "python.analysis.extraPaths": [
        "./top/mid1"
    ],
    "python.autoComplete.extraPaths": []
}
  • 此时,我们在button2.py文件去执行print_mid1()函数就会成功了
if __name__ == "__main__" :
    print_mid1()
  • 输出
这里是mid1文件夹下 button1.py文件的 print_mid1()函数
  • 此时还会在mid1文件夹下生成一个__pycache__文件,pycache 是Python中的一个特殊目录,用于存储已编译的字节码文件(.pyc 文件)。这个目录是Python 3引入的,主要用于提高Python模块的加载性能。不影响文件的正常运行。

你可能感兴趣的:(Python学习,python,开发语言)