Python 模块的搜索路径是 sys.path 中的路径,其中包含当前目录。在 sys.path 路径中的 python 文件都会被当作模块处理。python 文件中定义的类、函数、变量都在以 python 文件命名的名字空间中,默认不会造成命名冲突。
我们以下图的 autoshutdown.py 文件为例:
当在 python 交互模式 import autoshutdown 模块,会提示找不到该模块。
C:\Users\Administrator> python Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> import os >>> os.getcwd() 'C:\\Users\\Administrator' >>> import autoshutdown Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'autoshutdown'
原因是 autoshutdown.py 不在 sys.path 目录列表中,我们可以将 autoshutdown.py 所在路径加到 sys.path 目录中,再次 import 不再报错。
通过 dir 函数可以获取到模块内的函数或全局变量,同样也可以检查它的 __file__ 变量,从而获取到模块的实际文件名。
>>> sys.path.append(r'd:\gitRepo\autox') >>> import autoshutdown >>> dir(autoshutdown) ['ConfigParser', 'MyConf', 'MyLog', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'base_conf', 'cancel', 'conf', 'default_conf', 'log', 'logging_conf', 'main', 'os', 'reboot', 'shutdown', 'shutdown_conf', 'sys', 'time', 'wait'] >>> autoshutdown.__file__ 'd:\\gitRepo\\autox\\autoshutdown.py' >>>
我们在交互模式可以测试模块的函数或类,当代码更新后,可以通过 reload 方法重新加载模块,从而在线更新代码的功能。
比如我们刚开始在代码中没有重载 MyConf 类的 __str__ 方法,在打印时输出的信息不够完整,只能看到一个 object 信息。
>>> sys.path.append(r'd:\gitRepo\autox') >>> from autoshutdown import MyConf >>> conf = MyConf(r'c:\autox\autox.ini') >>> print(conf) <autoshutdown.MyConf object at 0x0000013617D1F820>
我们更新代码后,自定义了 MyConf 对象的输出:
调用 importlib 模块的 reload 方法,重新加载 autoshutdown 模块,重新打印 MyConf 对象,此时对象的自定义输出功能已更新:
>>> from importlib import reload >>> reload(autoshutdown) <module 'autoshutdown' from 'd:\\gitRepo\\autox\\autoshutdown.py' >>> f = r'c:\autox\autox.ini' >>> conf = autoshutdown.MyConf(f) >>> print(conf) # 关机参数: shutdown_time = 01:30 is_shutdown = True is_reboot = False wait_second = 180 # 日志参数: is_off = False log_dir = c:\autox\logs prefix = x # 自动更新参数: url = http://autoupdate.xyz.com dest = c:\autox
评论