gpt4 book ai didi

python - 奇怪的 python 搜索路径行为,这里出了什么问题?

转载 作者:可可西里 更新时间:2023-11-01 09:26:25 24 4
gpt4 key购买 nike

我们在 Windows XP 32 位上有一个基于 Excel 2003 和 Python 2.4 的应用程序。该应用程序包含大量 Python 函数,可以从许多 Excel 工作表中调用这些函数。

我们注意到一种异常行为,即有时在其中一个调用的中间,python 解释器将开始四处寻找几乎可以肯定已经加载并在内存中的模块。

我们之所以知道这一点,是因为我们能够将 Sysinternal 的进程监视器连接到进程,并观察到进程(当被调用时)不时开始在一堆目录和鸡蛋中寻找某些 .py 文件。

显而易见的尝试是查看 python 搜索路径是否已被修改,但我们发现情况并非如此。这正是我们所期望的。奇怪的是:

  • 触发此搜索行为的时机似乎是随机的,即它并非每次都发生或以任何明显的模式发生。

  • 该行为不会影响函数的结果。无论是否触发此文件搜索行为,它都返回相同的值。

  • 正在扫描的文件夹在 J 驱动器不包含此类文件夹的计算机上不存在(例如 J:/python-eggs )。自然地,procmon 报告这生成了文件未找到错误。

这一切都非常神秘,所以我不指望任何人能够就可能出现的问题提供明确的答案。对于如何调试此问题的任何建议,我将不胜感激。

谢谢!

回复评论

  1. 正在搜索的所有内容都是真实的、已知的 python 文件,它们存在于主项目 .egg 文件中。奇怪的是,在搜索它们时,那​​些特定的模块已经被导入了。它们必须在内存中才能使进程运行。

  2. 是的,这会影响性能,因为有时这种搜索行为会尝试访问网络驱动器。此外,通过搜索不可能包含某些模块的鸡蛋,该过程会被公司强制要求的病毒扫描程序中断。这会减慢通常无害的即时中断。

  3. 这是常用的 python 2.4.4。没有修改。

最佳答案

Python 程序可以随时导入模块,而不仅仅是在程序加载期间。尝试搜索您用于import 的模块。

如果这不起作用,您可以编写一个导入 Hook ,以在所有导入尝试发生之前捕获并报告它们。例如,如果您在其他一切之前运行它,您将获得每个尝试导入及其来源的转储:

import sys, traceback

class ImportDebugger:
def find_module(self, fullname, path=None):
print "Attempting to import %s:" % fullname
traceback.print_stack()

sys.meta_path.insert(0, ImportDebugger())

关于python - 奇怪的 python 搜索路径行为,这里出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com