导入模块调用函数在未手动设置环境变量的前提下只能导入同级或者子级模块,一个完整的项目程序结构与上图类似,由一个总的文件夹包含多个子文件夹,以上图为例,如果想实现不管这个总的文件夹在哪个位置都能动态的实现模块导入级函数调用,可以这样做(在atm中导入main并调用main中的login函数):
import os
import sys
print(os.path.abspath(__file__)) #__file__是两个_组成
#获取绝对路径:E:\PYTHON程序\04\目录结构规范\bin\atm.py
print(os.path.dirname(os.path.abspath(__file__)))
#绝对路径的文件名路径,就是绝对路径的上一级:E:\PYTHON程序\04\目录结构规范\bin
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
#再往上一级:E:\PYTHON程序\04\目录结构规范
BASA_DIR = os.path.dirname( os.path.dirname( os.path.abspath( __file__ ) ) )
sys.path.append(BASA_DIR) #添加BASA.DIR环境变量,相当总文件夹于不管在什么位置都能动态添加其位置到环境变量
from conf import settings
from core import main #导入core中的main,这种方法只能使用from的导入格式,from后的文件夹可以直接写中文
main.login()
#结果:welcome to my atm
main中的函数:
def login():
print("welcome to my atm")