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

READ  Python 变量、常量和数字文字, 字符串文字, 布尔文字, 文字集合, 和特殊文字以及变量和常量的规则和命名约定
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in Python教程

发表回复

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

Leave the field below empty!