Python 模块之间的调用

本文介绍了Python项目中不同模块间的调用方式,包括从父模块调用子模块及从子模块调用父模块的情况,并详细解释了如何解决因模块路径问题导致的导入错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

user_main调用handle模块中的home方法,导入命令:

from backend.login import handle

handle模块中使用到了sql_api模块,导入命令:

from backend.db import sql_api

这个目录里面,user_main调用了handle模块,handle模块调用了sql_api模块,sql_api模块里面使用了配置文件settings
#user_main调用了handle模块
from backend.login import handle

handle.home()

#handle模块调用了sql_api模块
from backend.db import sql_api
def home():
    print ("welcome to home page")
    q_data = sql_api.select('user')
    print (q_data)

def movie():
    print ("welcome to movie page")

def tv():
    print ("welcome to tv page")

#sql_api模块中的db_auth方法使用了settings配置文件
from configure import settings
def db_auth(configs):
    if configs.DATABASE['user'] == 'root' and configs.DATABASE['password'] == '123':
        print("db auth successed")
    else:
        print("db login failed")

def select(table):
    db_auth(settings)
    if table == 'user':
        return table

打印结果

welcome to home page
db auth successed
user

 

#################################################################################################

前面我们都是从父模块调用到子模块,现在我们尝试着从子模块调用其他父模块的子模块,例如我们直接执行sql_api模块,该模块需要调用settings参数

from configure import settings
def db_auth(configs):
    if configs.DATABASE['user'] == 'root' and configs.DATABASE['password'] == '123':
        print("db auth successed")
    else:
        print("db login failed")

def select(table):
    db_auth(settings)
    if table == 'user':
        return table

#结果
Traceback (most recent call last):
  File "D:/Python/Day5/dj/backend/db/sql_api.py", line 2, in <module>
    from configure import settings
ImportError: No module named 'configure'

我们可以通过命令查看到当前的执行模块的位置,然后计算出base的目录,然后再将base目录添加到os.path环境变量中去(list属性)


__author__ = 'Alex'
import sys
import os
print (sys.path)
print (__file__)
print (os.path.dirname(__file__))
print (os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
base_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
sys.path.append(base_dir)
from configure import settings
def db_auth(configs):
if configs.DATABASE['user'] == 'root' and configs.DATABASE['password'] == '123':
print("db auth successed")
else:
print("db login failed")

def select(table):
db_auth(settings)
if table == 'user':
return table

#结果:

['D:\\Python\\Day5\\dj\\backend\\db', 'D:\\Python', 'C:\\Windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']
D:/Python/Day5/dj/backend/db/sql_api.py    #__file__打印当前文件的相对路径(注意是相对,此处的绝对路径是pycharm自己添加的)
D:/Python/Day5/dj/backend/db               #os.path.dirname(__file__)去掉最后一个/后的文件名(不管后面是文件还是文件夹的名字)

D:/Python/Day5/dj                          #os.path.dirname()执行三次以后的结果

 

 

转载于:https://www.cnblogs.com/python-study/p/5506685.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值