python--模块导入的问题

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

一、模块的使用

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

扫描二维码关注公众号,回复: 14791884 查看本文章
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即可

猜你喜欢

转载自blog.csdn.net/BLee_0123/article/details/129540958