Disable use of pyc file with no matching py file

Andrea Crotti andrea.crotti.0 at gmail.com
Tue Jan 31 06:18:47 EST 2012


On 01/30/2012 09:30 PM, Roy Smith wrote:
> Every so often (typically when refactoring), I'll remove a .py file and forget to remove the corresponding .pyc file. If I then import the module, python finds the orphaned .pyc and happily imports it. Usually leading to confusing and hard to debug failures.
>> Is there some way to globally tell python, "Never import a .pyc unless the corresponding .py file exits"? Perhaps some environment variable I could set in my .login file?

If you want to stay python only I have this function:
def clean_orphaned_pycs(directory, simulate=False):
 """Remove all .pyc files without a correspondent module
 and return the list of the removed files.
 If simulate=True don't remove anything but still return
 the list of pycs
 """
 exists, join = path.exists, path.join
 rm = (lambda _: None) if simulate else remove
 removed = []
 for root, dirs, files in walk(directory):
 for f in files:
 if f.endswith(".pyc"):
 pyc = join(root, f)
 if not exists(pyc[:-1]):
 logger.debug("DELETING orphaned file %s" % pyc)
 removed.append(pyc)
 rm(pyc)
 # ignore certain sub-dirs
 for i in reversed(range(len(dirs))):
 d = dirs[i]
 if d == ".svn" or d.endswith(".egg-info"):
 dirs.pop(i) # dirs.remove(d)
 return removed


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /