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||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别
Python文件.py||.pyi||.pyc||.pyo||.pyd等各种文件后缀区别