Python---import 小记

基础知识

1.路径:在sys.path这个变量里面的路径找可能匹配的package和module

2.package:在某个文件夹中添加一个__init__.py,这个文件夹便会被识别为package 

文件结构:

错误1:项目文件夹不能作为package导入,需要再加一层结构

 正确:

 导入方法

示例项目:

在 A.py 中导入 B.py:

 [在.py文件中导入相同路径下的模块]

import B         # 导入

print(B.str)    # 使用

A.py与B.py在同一个路径下,可以直接import

在 A.py 中导入 D.py:

 [在.py文件中导入相同路径下的包中的模块]

错误:AttributeError: module 'sub_sub' has no attribute 'D'

import sub_sub                   # 导入package

print(sub.sub.D.test_str)       # 引用包sub_sub中D.py的test_str变量

正确:

from sub_sub import D           # 从sub_sub包中导入D模块

print(D.test_str)               # 使用D中的变量test_str

由此知,import 后面只能跟模块,而不能直接跟包,直接import 包,在使用时会报错

在 A.py 中导入 C.py:

 [.py文件与需要导入的模块的上级目录在同一个包内]

from package.sub2 import C      # 导入package中sub2包的C模块
print(C.test_str)               # 使用C的变量test_str

小笔记

1.导入项目目录不同的路径下的.py文件,最好使用 from  package import module  【扩展为:from package.subpackage import module】的方法,统一使用完整路径,提高移植性,并且各处引用高度统一

2.引用相同路径下的模块,可以使用import,但是会存在以下问题

A.py 通过import module 的方式引入了B模块,可以正常获取到B的变量,

A.py
import B

class PrintTest(object):
    num = 20

    def printtest(self):
        print(B.test_str)
              
test_class = PrintTest()
test_class.printtest()

但是如果此时,不在同一路径下的C.py 调用A.py时

报错:ModuleNotFoundError: No module named 'B'

from package.sub1 import A
test_str = A.test_class.num
print(test_str)

正确:

A.py
from packagesub1 import B

class PrintTest(object):
    num = 20

    def printtest(self):
        print(B.test_str)
              
test_class = PrintTest()
test_class.printtest()

此时,C才能够找到不在同一路径下的B文件

所以,from 路径 import module可以省去很多导入模块寻找不到路径的问题。

 参考:https://www.cnblogs.com/he12345/p/7510767.html

原文地址:https://www.cnblogs.com/ohlala/p/11475717.html