Python cProfile:pyo文件是不是可能

Posted

技术标签:

【中文标题】Python cProfile:pyo文件是不是可能【英文标题】:Python cProfile: Is it possible for pyo filePython cProfile:pyo文件是否可能 【发布时间】:2011-07-05 15:41:05 【问题描述】:

我是 Python 的初学者并尝试通过命令行调用 cProfile,即

python -m cProfile -o ./temp/PROFILE.log myScript.pyo

但它会抛出一条错误消息,指出

SyntaxError: 第 1 行文件 myScript.pyo 中的非 ASCII 字符“\xb3”,但未声明编码;详情见http://www.python.org/peps/pep-0263.html

但是,如果我对 myScript.py 文件执行相同操作,它就可以正常工作。

我必须在客户端机器上收集配置文件数据,并且该机器上不能有源代码。

我有什么遗漏吗?

【问题讨论】:

【参考方案1】:

我很确定 cProfile 使用了 execfile()。提示来自文档(http://docs.python.org/library/profile.html):

这个函数接受一个参数 可以传递给 exec 声明

execfile() 无法执行 *.pyc 和 *.pyo 文件 - 它失败并出现同样的异常。

>>> execfile("myscript.pyc")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tix_email.pyc", line 1
SyntaxError: Non-ASCII character '\xd1' in file tix_email.pyc on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

针对 .pyc 或 .pyo 运行 profile/cProfile 的用例可能从未得到解决。我还没有找到关于为什么会这样的规范解释,但是由于 cPython 解释器的工作方式,通常预计主脚本不会被字节编译。解释器不会自动对主脚本进行字节编译,但会对导入的模块执行此操作。这是关于该主题的 SO 问题:Why does Python compile modules but not the script being run?

要解决您的问题,您可以使用启动脚本来调用您通常在您想要分析的 .pyo 中作为 main 执行的内容。暴露的代码将非常简单。

launch.py​​

import foo
foo.call_my_func()

然后运行:

python -m cProfile -o ./temp/PROFILE.log launch.py​​

【讨论】:

我尝试在 launch.py​​ 文件中导入 xyz.pyo 文件,但 python 给我错误` ImportError: No module named xyz` 并且如果我将 xyz.py 放在 xyz.pyo 的 plae 中,python很高兴@jeremy-brown @Kashif:要导入xyz.pyo(但不是.pyc.py),您必须使用-OO 运行Python

以上是关于Python cProfile:pyo文件是不是可能的主要内容,如果未能解决你的问题,请参考以下文章

python .py .pyc .pyw .pyo .pyd区别

python py pyc pyw pyo pyd之间区别

Python文件.py||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别

Python文件.py||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别

Python文件.py||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别

Python文件.py||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别