模块
1、初识模块
一个文件被看作一个独立模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。
模块内的函数的完整名字是通过句点标识符指定的,防止了名称冲突。例如:
tkinter.Tk()
2、搜索和路径
路径搜索和搜索路径是两个不同的概念,前者指查找某个文件的操作,后者是去查找一组目录。
通常我们导入模块,就回去路径中搜索,如果模块没在搜索路径中,就会导致路径搜索失败:
# 正常的模块导入
PS C:\Code> python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>>
# 失败的模块导入
>>> import xxx
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'xxx'
>>>
默认的搜索路径是在模块安装是指定的,但是也是可以被修改的。
在python解释器启动后,就可以访问搜索路径,通常被保存在sys模块的sys.path变量中。而且其输出为一个包含有各个独立路径的列表。
>>> import sys
>>> sys.path
['', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
>>>
我们可以对其进行修改,使用append()方法即可:
>>> sys.path.append('/home/wesc/py/lib')
此外使用sys.modules可以找到当前导入了哪些模块和他们的来处。与sys.path不同,sys.modules是一个字典,使用模块名作为键(key),对应物理地址作为值(value):
>>> sys.modules
{'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings':
<module '_warnings' (built-in)>, '_thread': <module '_thread' (built-in)>, '_weakref': <module '_weakref' (built-in)>, '_frozen_importlib_external': <module '_frozen_importlib_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'nt': <module 'nt' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, 'encodings': <module 'encodings' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\__init__.py'>, 'codecs': <module 'codecs' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\codecs.py'>, '_codecs': <module '_codecs' (built-in)>, 'encodings.aliases': <module 'encodings.aliases' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\aliases.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\utf_8.py'>, '_signal': <module '_signal' (built-in)>, '__main__': <module '__main__' (built-in)>, 'encodings.latin_1': <module 'encodings.latin_1' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\latin_1.py'>, 'io': <module 'io' from
'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\io.py'>, 'abc': <module 'abc' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\abc.py'>, '_weakrefset': <module '_weakrefset' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\_weakrefset.py'>, 'site': <module 'site' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site.py'>, 'os': <module 'os' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\os.py'>, 'errno': <module 'errno' (built-in)>, 'stat': <module 'stat' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\stat.py'>, '_stat': <module '_stat' (built-in)>, 'ntpath': <module 'ntpath' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>, 'genericpath': <module 'genericpath' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\genericpath.py'>, 'os.path': <module 'ntpath' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>, '_collections_abc': <module '_collections_abc' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\_collections_abc.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\_sitebuiltins.py'>, 'sysconfig': <module 'sysconfig' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\sysconfig.py'>, 'atexit': <module 'atexit' (built-in)>}