从打包为zip文件的应用程序的命令行运行pdb?

时间:2014-04-13 04:10:33

标签: python zip pdb

Python能够在zip存档中运行代码。这解释了为什么有些代码以熟悉的#!/usr/bin/env python开头,后面紧跟原始zip文件的字节。 参见例如http://sayspy.blogspot.com/2010/03/various-ways-of-distributing-python.html

Python还允许用户通过命令行中的任何代码,通过" -m pdb"方便地运行python调试器。选项。但是在压缩程序上运行它(如流行的youtube-dl program)会导致编码错误,如下所示:

$ python -m pdb /usr/bin/youtube-dl -h 
Traceback (most recent call last): 
  File "/usr/lib/python2.7/pdb.py", line 1314, in main 
    pdb._runscript(mainpyfile) 
  File "/usr/lib/python2.7/pdb.py", line 1233, in _runscript 
    self.run(statement) 
  File "/usr/lib/python2.7/bdb.py", line 387, in run 
    exec cmd in globals, locals 
  File "<string>", line 1, in <module> 
File "/usr/bin/youtube-dl", line 2
SyntaxError: Non-ASCII character '\xdb' in file /usr/bin/youtube-dl on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 
Uncaught exception. Entering post mortem debugging 
Running 'cont' or 'step' will restart the program 
> <string>(1)<module>() 
(Pdb) 

referenced PEP 263并未谈论zip,我不确定此zip功能的正式描述或实施位置。

所以我的问题是,有没有办法让这个工作为一个任意的zip文件,而不解压缩并在zip内的__main__.py上运行pdb?也许是通过对pdb的增强,还是围绕它的包装?

1 个答案:

答案 0 :(得分:1)

PEP 273 - 从Zip档案中导入模块是一个可以讨论该问题的提案。

因此,您可以轻松调试Zip存档中的文件

void someFunction(int value, Data aData)
{
   float normalizedValue = (value - myMap[aData.type](aData, true)) / (myMap[aData.type](aData, false) - myMap[aData.type](aData, true));
}