python---引用其他py文件中的函数-yuan

发布时间 2023-05-27 19:39:00作者: 没有任何出路

/user/test:
....A
........a.py
....B
........b.py
a.py:

def fa():
	print("a")

b.py想调用a.py中的函数fa():

sys添加路径方法

import sys
sys.path.append("test/A")
from a import *
fa()

init方法-1:

  1. 在A文件夹和B文件夹中新建__init__.py文件,目录变成:
    test:
    ....A
    ........a.py
    ........init.py
    ....B
    ........b.py
    ........init.py
  2. b.py中的内容为:
from A.a import *
fa()

此时,b.py运行的时候,首先需要将目录切换到test文件夹,即:/user/test目录下;然后执行python -m B.b。这个时候会把当前执行目录(/user/test)添加到sys.path中。这个目录包含需要导入的模块A.a的路径,所以模块导入成功。
如果直接在/user/test/B目录下运行python b.py,则会将b.py文件所在的目录/user/test/B添加到sys.path中。这个目录不包含导入的模块:a.py的路径(/user/test/A),所以会导入模块失败。

init方法-2:

  1. 在test文件夹中新建文件c.py,在c.py中调用b.py,此时,b.py导入a.py模块的时候以c.py作为相对路径。
  2. b.py
from A.a import *
def fb():
    fa()
  1. c.py
from B.b import *
fb()
  1. 执行python c.py,此时,会把c.py的目录/user/test添加到sys.path中。模块可以导入成功。

总结:python导入模块的机制原理:将from后面的内容(即要导入的模块),拼接到sys.path中的每一条路径后面,如果可以正确识别,则该模块可以正确导入。否则导入失败。根据该原理:__init.py__文件的存在保证了只需将项目的根目录添加到sys.path中,其下的子文件夹和.py文件均可被识别。添加路径的方法可以使用sys.path.append()方法(python也会把当前执行的py文件所在目录自动添加到sys.path中)。