python在linux下和windows下导入模块的区别

P
|-A
|    a.py
|-B
|    b.py

文件结构如上,在windows下
a想运行b中的方法,可以直接写成

from B impot b
b.fun()

但是在linux中会出现

ModuleNotFoundError: No module named 'B'

可以通过引入sys添加路径解决

import sys
sys.path.append("/P")
from B impot b

在程序中为了也有良好的移植性,可以在代码中显式添加路径,
比如用os的方法:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
或者
os.getcwd()

或者pathlib 方法:

BASE_DIR = Path(__file__).resolve().parent.parent

最后可以添加到 sys.path中

sys.path.append(str(BASE_DIR))

但是要注意,追加的路径要与包导入想对应,要追加包的上一级
比如:

P
|-A
|    a.py
|-B
|    b.py
|---sub_B
     |   utils.py	

如果路径中追加 /P ,那么导入模块要写成

from B.sub_B import utils

如果路径中追加/P/B,那么导入模块要写成

from sub_B import utils

python是解释性语言,所有相对路径都是相对于程序入口而言的,即程序启动时候所在的目录。如果要在P目录下启动 A/a.py , 和 在 A 目录下启动 a.py 程序中所写的相对路径是不同的,相对路径是相对于程序启动时候的当前目录而言的。在P目录下启动,那么当前目录就是 /P , A目录下启动当前目录就是 /P/A

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值