有一段时间我遇到了一个非常难以调试的问题:我的$ PYTHONPATH中有一个剩余的.pyc文件,并且匹配的.py文件已被移动到稍后在$ PYTHONPATH的其他地方 - 所以当我尝试导入模块时,使用“孤立”.pyc文件,并且忽略对“真实”.py文件的所有更改,让我感到非常困惑,直到我发现正在发生的事情。
有没有办法让python 不使用“孤儿”.pyc文件,或在使用时打印警告?
或者,我有这个问题的事实是否意味着我做错了什么,如果有的话,是什么?
答案 0 :(得分:6)
试试这个(see here):
PYTHONDONTWRITEBYTECODE
如果设置了此项,Python将不会尝试在导入源模块时编写
.pyc
或.pyo
个文件。这相当于 指定-B
选项。2.6版中的新功能。
但是有一个问题与之相关:你将失去拥有.pyc
文件的好处(从而失去性能)。更好,更清洁,更友好的方法是遍历目录并清除您不需要的孤立.pyc
文件。您应该使用脚本执行此操作,并确保没有.pyc
个与.py
个文件无关的文件(例如,某些级别的混淆)。
答案 1 :(得分:6)
你无法阻止Python加载.pyc文件,如果它在路径中找到它们,没有。
您有几个选择:
导入有问题的模块,找出它的路径:
>>> import borkenmod
>>> import sys
>>> sys.modules[borkenmod.__name__].__file__
'lib/python2.7/borkenmod.pyc'
使用script to walk your PYTHONPATH and delete stale bytecode files。链接脚本会删除所有 .pyc
文件,而这些文件中没有相应的.py
文件。
擦除PYTHONPATH中的所有.pyc文件,让Python使用compileall
module重新生成它们:
python -m compileall [path]
然后删除那个文件。
请注意,最后两个选项可能会导致删除合法的python模块!一些python模块(特别是商业许可)仅作为编译的字节码分发。