Python中夸目录导包

跨目录import包的问题又来了!!!!!之前是直接将要调用的py文件的绝对路径append,但是项目要经常迁移到各种平台,将路径写死了很不方便。

import sys
sys.path.append('C:\Users\KerryChen\Desktop\PsyDrugKB\')
from utils.dbutils import DBconnection

得改成相对路径,如下图所示我要在transporter.py里调用utils文件夹里的dbutils.py

直接调用发现,报了如下错误——没有'utils.dbutils'的模块。

/home/cqfnenu/PsyDrugKB
Traceback (most recent call last):
  File "/home/cqfnenu/PsyDrugKB/transporter/transporter.py", line 20, in <module>
    from utils.dbutils import DBconnection
ModuleNotFoundError: No module named 'utils.dbutils'

通过查阅各种博客发现添加如下的代码总算是解决了该报错。

import importlib, sys
importlib.reload(sys)
sys.path.append(os.path.abspath(__file__).rsplit('/', 2)[0])
from utils.dbutils import DBconnection

最后总结一下,在跨目录调包的时候,我们要知道如何获取当前脚本文件的相对路径和绝对路径。

import os,sys

print(__file__)   # 获取transporter.py的相对路径

print(os.path.abspath(__file__))  #  获取transporter.py的绝对路径

print(os.path.dirname(os.path.abspath(__file__)))   # 获取transporter文件夹的绝对路径

print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  # 获得的是PsyDrugKB文件夹的绝对路径

# 添加环境变量,因为append是从列表最后开始添加路径,可能前面路径有重复,最好用sys.path.insert(Base_DIR)从列表最前面开始添加
Base_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(Base_DIR)

from utils.dbutils import DBconnection

参考博文:(1条消息) python 跨目录导入包_shad_ow的博客-CSDN博客_python从其他文件夹导入包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值