python import学习总结

import干了啥:

在 import xx 时,Python解释器会首先创建一个新的名称空间,这个名称空间用于存放 xx 模块中定义的名字,然后在该名称空间中执行 xx.py 文件。

 

具体例子来啦~

假设有目录路径如下:

- ROOT

  -pk_1

     - __init__.py

     - m1.py

  -pk_2

     - __init__.py

     - m2.py

     - m3.py

  - test.py

 

以下四种情况的import:

1. m3.py中 import m2:

    m3与m2同目录,所以在m3中直接“import m2”即可

2. test.py中 import m1:

   运行test.py时,当前目录是ROOT,所以直接“from pk_1 import m1”即可

3. 在m3中 import m2, 然后再test中 import m3:

   1) 假设在m3.py中写“import m2”,在test中写"from pk_2 import m3":单独运行m3.py是没问题的,因为运行m3.py时,当前目录是pk_2,可以直接import m2。但是运行test.py就会报错,因为运行test时,当前目录是ROOT,import m2是找不到这个模块的

  2) 假设在m3.py中写“from pk_2import m2”,在test中写"from pk_2 import m3":单独运行m3会报错。因为在当前目录pk_2下找不到pk_2;但是运行test就是正确的,因为在当前目录ROOT下找pk_2,然后import m2进来,是可以找到的

 

4. m3中 import m1

   在m3中写“from pk_1 import m1”,是会报错的。因为在当前目录pk_2中时找不到pk_1的。所以现在要将ROOT这层目录加到sys.path里。所以要在m3.py里加上如下代码:

  

import sys, os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

注意:

  os.path.abspath(__file__) : m3.py所在路径,到文件级别

  os.path.dirname(os.path.abspath(__file__)) : m3.py所在目录的路径,也就是pk_2

  往后再套一层  os.path.dirname就是再少一层目录

 

参考:https://www.cnblogs.com/xingxia/p/python_package_module.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值