我已经在一个相当大的项目中重命名了一些文件,并希望删除他们留下的.pyc文件.我尝试了bash脚本:
rm -r *.pyc
Run Code Online (Sandbox Code Playgroud)
但是这并没有像我想象的那样通过文件夹递归.我究竟做错了什么?
我知道一个.pyc文件是由python解释器生成的,并且包含字节代码,正如这个问题所说的那样.
我以为python解释器正在使用时间戳来检测a .pyc是否比a更新.py,如果是,则在执行时跳过再次编译.(makefile的做法)
所以,我做了一个测试,但似乎我错了.
t.py包含print '123'和t1.py包含import
t.运行命令python t1.py给出了输出123并生成了t.pyc所有内容.t.py的print '1234'和更新的时间戳
t.pyc使用touch t.pyc.python t1.py一次,我以为我会得到123但1234
确实如此.所以似乎python解释器仍然知道t.py
更新.然后我想知道python解释器是否会在t.pyc每次运行时编译和生成python t1.py.但是当我python t1.py多次运行时,我发现t.pyc未更新时t.py不会更新.
所以,我的问题是:python解释器如何知道何时编译和更新.pyc文件?
更新
由于python解释器使用存储在.pyc文件中的时间戳.我认为这.pyc是上次更新时间的记录.导入时,将其与.py文件的时间戳进行比较 .
所以我试图以这种方式破解它:将操作系统时间更改为较旧的时间,然后编辑.py文件.我想再次导入时,.py看起来比较旧 …
关于 Python 的 .pyc 文件已经存在几个问题,但我还没有读到 1)这些文件何时(在什么情况下)创建的以及 2)是否有充分的理由保留它们。
进一步来说:
关于 (1):在我运行的 200 个或更多 PY 文件(新的和旧的)中,我只看到创建了几个 .pyc 文件。然而,在Python自己的(安装)目录中,目前有1160个.pyc文件,大约是.py文件的一半!我不知道其中有多少已经存在于 Python 的安装中,但其中大约 450 个肯定是在那之后创建的。因此,这些文件是在什么情况下创建的,对我来说是个谜。或者它们总是自动创建,然后在 PY 程序终止后被删除?
关于 (2):我将 .py 与 .pyc 文件的执行时间进行了比较,但看不到任何(显着)差异。我没有大型 .py 文件或带有升沉计算等的 .py 文件来测试。但就“常规”文件(中小型且具有常规计算)而言,.pyc 文件似乎毫无用处。那么,为什么要保留它们呢?
...后来:我刚刚意识到 .pyc 文件仅在其对应时才会创建。.py 文件用作模块,即导入。好吧,这里面有很多意义!:)