Menu Close

Python 模块搜索路径和模块重新加载

1.Python 模块搜索路径简介

当你导入一个模块时,采用的语法:

import module

导入模块时,Python 会在多个位置进行检查。 解释器首先寻找一个内置模块。 然后(如果未找到内置模块),Python 查找sys.path中定义的目录列表。 搜索按此顺序进行。

  • 当前目录。
  • PYTHONPATH(具有目录列表的环境变量)。
  • 与安装有关的默认目录。

例1.1 打印出系统路径

import sys
for path in sys.path:
    print(path)

C:\0python\venv\Scripts\python.exe C:/0python/venv/main.py
C:\0python\venv
C:\0python
C:\Users\steve\AppData\Local\Programs\Python\Python310\python310.zip
C:\Users\steve\AppData\Local\Programs\Python\Python310\DLLs
C:\Users\steve\AppData\Local\Programs\Python\Python310\lib
C:\Users\steve\AppData\Local\Programs\Python\Python310
C:\0python\venv
C:\0python\venv\lib\site-packages

我们可以添加和修改此列表以添加我们自己的路径。

为确保 Python 总能找到 module.py,您需要:

  • 将 module.py 放在程序将执行的文件夹中。
  • 在 PYTHONPATH 环境变量中包含包含 module.py 的文件夹。或者,您可以将 module.py 放在 PYTHONPATH 变量中包含的文件夹之一中。
  • 将 module.py 放在与安装相关的文件夹之一中。

2.重新加载模块 (imp即将淘汰)

Python 解释器在会话期间仅导入一次模块。 这使事情更有效率。

例2.1 模块重新加载

假设我们在名为my_module的模块中具有以下代码。

my_module.py

# This module shows the effect of
# multiple imports and reload

print("This code got executed")

现在我们看到了多次导入的效果。

main.py

import my_module
import my_module
import my_module

我们可以看到我们的代码只执行了一次。 这说明我们的模块仅导入了一次。

现在,如果我们的模块在程序执行过程中发生了变化,我们将不得不重新加载它。一种方法是重启解释器。 但这并没有太大帮助。

Python 提供了一种更有效的方法。 我们可以使用imp模块内部的reload()函数来重新加载模块。 我们可以通过以下方式做到这一点:

main.py

import imp
import my_module
import my_module
imp.reload(my_module)

结果

DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses
import imp
This code got executed
This code got executed

 

wer

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in Python教程

Related Posts