当前位置: 动力学知识库 > 问答 > 编程问答 >

cpython - Is there anyway to clear python bytecode cache?

问题描述:

each unit test I'm running is writing python code out to a file, then importing it as a module. The problem is that the code changes but further import statements don't modify the module.

I think what I need is a way to ether force a reload on a module or clear the internal bytecode cache. Any ideas?

Thanks!

网友答案:

Reimporting modules is tricky to get all the edge cases right. The documentation for reload mentions some of them. Depending on what you are testing, you may be better off by testing the imports with separate invocations of the interpreter by running each via, say, subprocess. It will likely be slower but also likely safer and more accurate testing.

网友答案:

Use reload().

Reload a previously imported module. The argument must be a module object, so it must have been successfully imported before. This is useful if you have edited the module source file using an external editor and want to try out the new version without leaving the Python interpreter. The return value is the module object (the same as the module argument).

However, the module needs to be already loaded. A workaround is to handle the resulting NameError:

try:
    reload(math)
except NameError:
    import math
网友答案:

Write your code to differently-named modules. Writing new code into an existing file, and trying to import it again will not work well.

Alternatively, you can clobber sys.modules. For example:

class MyTestCase(unittest.TestCase):
    def setUp(self):
        # Record sys.modules here so we can restore it in tearDown.
        self.old_modules = dict(sys.modules)

    def tearDown(self):
        # Remove any new modules imported during the test run. This lets us
        # import the same source files for more than one test.
        for m in [m for m in sys.modules if m not in self.old_modules]:
            del sys.modules[m]
网友答案:

Ran into a similar situation. Later on found that the white space indentation technique used matters. Especially on windows platforms, ensure that a uniform technique is adapted throughout the module i.e., either use tab or spaces exclusively.

分享给朋友:
您可能感兴趣的文章:
随机阅读: