使用 memory_profiler 时无法导入模块

Posted

技术标签:

【中文标题】使用 memory_profiler 时无法导入模块【英文标题】:Cannot import module when using memory_profiler 【发布时间】:2013-05-21 13:15:11 【问题描述】:

我正在尝试使用 memory_profiler,但遇到了一个在 example.py 中隔离的问题:

#! /usr/bin/env python 
import argparse

def parse_args():
    parser = argparse.ArgumentParser(description='Dummy description')
    parser.add_argument('--option',  action='store_true')
    return parser.parse_args() 

if __name__ == '__main__':
    parse_args()

所以基本上只使用argparse。独立运行良好(我有 Python3.3)。但是,当我发出

$ python -m memory_profiler example.py

我得到一个错误:

NameError: global name 'argparse' is not defined

如果我把这条线放在一边

    parser = argparse.ArgumentParser(description='Dummy description')

下面

    if __name__ == '__main__':

然后我注释掉对 parse_args() 的函数调用,然后我没有收到错误。

有人知道这里出了什么问题吗?

【问题讨论】:

你能显示一个简单的python --version 的输出吗?我怀疑您使用不同的解释器版本来启动脚本而不是在内存分析下运行,因为argparse 应该是 3.x 中的标准。 对我来说它在 2.7 下工作正常,只给出 python 2.6 的错误 它应该在当前版本的 memory_profiler (0.27) 中修复 【参考方案1】:

根据我的经验,内存分析器不使用其PYTHONPATH 中的当前目录,因此我的解决方法是使用以下命令:

PYTHONPATH=./<CORRECT_PATH> python -m memory_profiler example.py

【讨论】:

以上是关于使用 memory_profiler 时无法导入模块的主要内容,如果未能解决你的问题,请参考以下文章

ZBrush 里刷的模型面数太多 无法导入3dMAX 修改 或者减面 怎么办 白刷了?

使用 memory_profiler 在 Flask 应用程序中分析行

如何使用 Python 多处理和 memory_profiler 分析多个子进程?

Python3 memory_profiler,同时使用lambda表达式连接PyQt5中的插槽

python3.6安装memory_profiler

psutil 是因为该包能提升 memory_profiler 的性能