目录结构如下:
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不在环境变量中
解决:
包如果使用绝对导入,包路径改变了导入会有问题,比如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即可
下一篇:网络 选择题(1)