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的增强,还是围绕它的包装?
解决方法:
PEP 273 – 从Zip Archives导入模块是一个提出这个问题的提议.
因此,您可以轻松调试Zip存档中的文件
python -c 'import pdb, youtube_dl; print youtube_dl; pdb.runcall(youtube_dl.main, ["-h"])' youtube-dl