最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题。
下面我来分享一下关于python中导入模块的一些基本知识。
1 导入模块时寻找路径
在每一个运行的python程序当中,都维护了一套sys文件,在这里面的path变量里,存储了在当前程序中导入模块时候寻找的路径。
上代码看一下:
1 import sys 2 3 if __name__ == '__main__': 4 file_path = sys.path 5 for i in file_path: 6 print(i) 7 ''' 8 执行结果: 9 10 D:WorkspacesPycharmProjects 11 C:UsersMr.ColdAppDataLocalProgramsPythonPython35python35.zip 12 C:UsersMr.ColdAppDataLocalProgramsPythonPython35DLLs 13 C:UsersMr.ColdAppDataLocalProgramsPythonPython35lib 14 C:UsersMr.ColdAppDataLocalProgramsPythonPython35 15 C:UsersMr.ColdAppDataLocalProgramsPythonPython35libsite-packages 16 '''
请让我来 解释一下~
我们导入sys,查看了sys.path。path是一个列表,里边存储了多个路径,这些路径是如果我们进行import 模块操作的时候,python会从这个路径从第一个开始到最后一个一个一个路径去找我们的模块,直到找了或者都没找到,再抛出异常。
如果我们自己写的模块放在奇怪的地方,在程序中import自然是无法为导入的。这个时候怎么办呢??
我们可以向sys.path这个列表的第一个位置里插入一个路径,就是我们自己编写的模块存放的位置。这样python再找的时候就能找到了。
上代码:
1 import sys 2 3 if __name__ == '__main__': 4 sys.path.insert(0, ".\" ) 5 6 file_path = sys.path 7 for i in file_path: 8 print(i) 9 ''' 10 执行结果: 11 12 . 13 D:WorkspacesPycharmProjects 14 C:UsersMr.ColdAppDataLocalProgramsPythonPython35python35.zip 15 C:UsersMr.ColdAppDataLocalProgramsPythonPython35DLLs 16 C:UsersMr.ColdAppDataLocalProgramsPythonPython35lib 17 C:UsersMr.ColdAppDataLocalProgramsPythonPython35 18 C:UsersMr.ColdAppDataLocalProgramsPythonPython35libsite-packages 19 '''
这一次呢,我们在程序执行之前对sys.path进行了insert( 0 , str) ,这是列表的基本操作,在0号位置插入了str。这个str则是 模块所在的路径
我向里面插入了.\代表当前路径,在打印结果中.就占了第一个位置。
有些小伙伴有疑问 我添加的是.\ 为什么出来的结果是.
这个问题呢是字符串的转义问题。在编程语言和操作系统中,识别 是有特殊含义的,比如 代表换行 代表回车