当前位置: 首页 > 知识库问答 >
问题:

你什么时候来。pyc文件刷新了吗?

融伯寅
2023-03-14

我知道“. pyc”文件是纯文本“. py”文件的编译版本,在运行时创建,以使程序运行得更快。然而,我观察到一些事情:

  1. 修改py文件后,程序行为发生变化。这表明"py"文件已经编译,或者至少经过某种哈希过程或比较时间戳,以判断它们是否应该重新编译。
  2. 删除所有. pyc文件(rm*. pyc)时,有时程序行为会改变。这将表明它们没有在更新“. py”s时编译。

问题:

  • 他们如何决定何时进行汇编
  • 有没有办法确保他们在开发过程中进行更严格的检查

共有2个答案

乐城
2023-03-14

.每当导入相应的代码元素时生成pyc文件,如果相应的代码文件已更新,则会更新pyc文件。如果是的话。pyc文件被删除后,它们将自动重新生成。但是,当删除相应的代码文件时,它们不会自动删除。

这可能会在文件级重构过程中导致一些非常有趣的错误。

首先,您可以推送只在您的计算机上工作而不在其他计算机上工作的代码。如果您对删除的文件有悬空引用,如果您不手动删除相关文件,这些文件仍将在本地工作。pyc文件,因为。pyc文件可用于导入。这与一个正确配置的版本控制系统只会推动的事实更加复杂。将文件复制到中心存储库,而不是。pyc文件,这意味着您的代码可以通过“导入测试”(一切导入都正常),并且不会在任何其他计算机上工作。

其次,如果将包转换为模块,可能会出现一些非常可怕的错误。当您将包(包含\uuu init\uuuuuuuuuupy文件的文件夹)转换为模块(一个.py文件)时。曾经表示该包的pyc文件仍然存在。特别是,\uuuuu init\uuu。pyc保持不变。因此,如果您的包foo中包含一些无关紧要的代码,那么稍后将删除该包并创建一个文件foo。使用一些函数pydef bar():传递并运行:

from foo import bar

你得到:

ImportError: cannot import name bar

因为python仍然在使用旧的。来自foo包的pyc文件,其中没有一个定义bar。这在web服务器上可能特别有问题,因为在web服务器上,完全正常工作的代码可能会因错误而中断。pyc文件。

由于这两个原因(可能还有其他原因),您的部署代码和测试代码应该删除。pyc文件,例如具有以下bash行的文件:

find . -name '*.pyc' -delete

另外,从Python2.6开始,您可以使用-B标志运行python,使其不使用。pyc文件。看看如何避免。pyc文件?更多细节。

另请参见:如何删除所有。项目中的pyc文件?

东方明亮
2023-03-14

。pyc文件只有在其他脚本导入python文件时才会创建(可能会被覆盖)。如果调用了导入,Python将检查。pyc文件的内部时间戳不早于相应的。py文件。如果是,则加载。pyc;如果不是,或者如果。pyc还不存在,Python编译。将文件复制到中。pyc并加载它。

你说的“更严格的检查”是什么意思?

 类似资料:
  • 问题内容: 我知道“ .pyc”文件是纯文本“ .py”文件的编译版本,是在运行时创建的,以使程序运行更快。但是我观察到了一些事情: 修改“ py”文件后,程序行为会更改。这表明“ py”文件已编译或至少经过某种哈希处理或比较时间戳,以便确定是否应重新编译它们。 删除所有“ .pyc”文件()后,有时程序行为也会改变。这表明它们不是在更新“ .py”时被编译的。 问题: 他们如何决定何时编译? 有

  • 问题内容: 什么时候需要刷新文件? 我从不这样做,因为我调用File.Close,并且我认为它会自动刷新,不是吗? 问题答案: 您会注意到os.File没有.Flush(),因为它不需要一个,因为它没有缓冲。写入是直接syscall写入文件。 当您的程序退出时(即使崩溃),操作系统将自动关闭所有打开的文件,并且文件系统会在您处理完磁盘后将您的更改写入磁盘(有时会在程序退出后几分钟) 。 调用os.

  • 问题内容: 已经了解Python是一种解释性语言…但是,当我查看Python源代码时,我看到的是Windows标识为“编译的Python文件”的文件。这些从哪里来? 问题答案: 它们包含字节码,这是Python解释器将源代码编译到的字节码。然后,此代码由Python的虚拟机执行。 Python的文档解释了这样的定义: Python是一种解释型语言,与编译型语言相反,尽管由于字节码编译器的存在,两者

  • 本文向大家介绍.py和.pyc文件有什么区别?,包括了.py和.pyc文件有什么区别?的使用技巧和注意事项,需要的朋友参考一下 Python编译.py文件并将其另存为.pyc文件 .pyc包含Python源文件的编译字节码,不会为您执行的主程序文件创建.pyc(仅对于导入的模块)。 .pyc文件包含编码的python字节码。 如果要导入模块,则模块将计算两个数的加法 示例 输出结果 如果您以“ e

  •   .py 文件是程序的源代码。 .pyc 文件是程序的编译字节。   Python 编译 .py 文件并将其保存为 .pyc 文件。 然后由Python虚拟机执行。   在执行主要源代码之前,python会查找它的编译版本(.pyc 文件),如果 python 找到,那么它将在虚拟机的帮助下执行它。   如果没有,那么它将寻找一个 .py 文件编译它然后执行 .py 文件。 基本上,.pyc 文

  • 本文向大家介绍请你来说一下什么时候会发生段错误?相关面试题,主要包含被问及请你来说一下什么时候会发生段错误?时的应答技巧和注意事项,需要的朋友参考一下 段错误通常发生在访问非法内存地址的时候,具体来说分为以下几种情况: 使用野指针 试图修改字符串常量的内容