python模块导入的问题
创始人
2025-05-28 04:21:07

目录结构如下:
在这里插入图片描述

一、模块的使用

s2使用s1的add函数

s1.py

def add(a, b):return a + b

方式一:
s2.py

from s1 import add
print(add(1, 3))

注意:导入如果爆红,只是编辑器爆红

方式二:
s2.py

import s1
print(s1.add(1, 3))

二、包的使用

s2使用package1包下package_s1的test函数

package_s1.py

def test():print('test')

方式一:
s2.py

from package1 import package_s1
package_s1.test()

方式二:
把包内部,很深的一些类,函数,给外部使用,需要在这注册一下
不在这注册的,本意是只给包内部用,如果外部想用,使用完整路径导入使用
先在package1目录下的__init__.py中导入

from .package_s1 import test

s2.py

import package1
package1.test()

三、相对导入和绝对导入

1.包里面的相对导入和绝对导入
package_s1.py

def test():print('test')

1、相对导入
package_s2使用package1包下package_s1的test函数
s2.py

from . import package_s1
def test_s2():package_s1.test()

2、绝对导入
s2使用package1包下package_s2的test_s2函数
package_s2.py

from script.package1 import package_s1  # 正确导入
def test_s2():package_s1.test()

如果这样导入from package1 import package_s1,会报错,因为package1不在环境变量中
解决:

  • 1 要么把package1加入到环境变量
  • 2 要么从环境变量路径开始导入

包如果使用绝对导入,包路径改变了导入会有问题,比如script目录不是根目录,上面还有个X目录

s2.py

from package1.package_s2 import test_s2
test_s2()

四、相对导入的坑

s2.py

from . import s1  # 相对导入,如果以脚本运行,报错
import s1  # 绝对导入不报错
print(s1.add(3, 4))

总结:
1 导入模块的路径,需要从环境变量下开始导入
2 执行脚本(s2)所在路径,自动加入到环境变量
3 也可使用相对导入(使用相对导入的py文件,不能作为脚本运行)

以django为例,django里除了settings.py所有文件都可以相对导入
导入文件,使用最短路径导入
如果导入飘红,并不一定是代码有问题,只需要把加到环境变量的路径,设为source root即可

相关内容

热门资讯

猜灯谜作文 【精选】猜灯谜作文集锦五篇  在日复一日的学习、工作或生活中,大家都不可避免地要接触到作文吧,作文是...
关于2016元宵节的灯谜及答...   后村闺中听风声(打一字)。 封  送走观音使不得(打一字)。 还  一点一点得知(打一字)。 短...
2017年三七女生节祝福语给...   3.7女生节,你是女生你做主,愿你跟随梦想旋律,尽享快乐岁月。下面是小编整理的2017年三七女生...
三月的节日 三月的节日六(5)班周品烨指导老师:夏新竹“三八”妇女节那天,我悄悄地把平日积攒的钱取出,奔向商店。...
写作技巧与方法 写作技巧与方法(精选7篇)  写作方法属于艺术表现方法(即:艺术手法和表现手法,也含表达手法(技巧)...