网站首页 > 基础教程 正文
每个 Python 开发人员在随时有可能会发现一些奇怪情况,比如他们会时不时看到一些奇怪的目录和文件,而且还不是自己创建的目录,例如:pycache,其中包含扩展名为 .pyc 的文件,这些文件与你的源代码具有相同的根文件名。这些文件是什么,要如何处理它们?或者有时你也会在 pycache 目录之外看到那些 .pyc 文件。
带有“pyc”扩展名的文件是 Python 在你第一次运行程序或源文件更改时创建的缓存、编译字节码。你通常应该忽略这些文件,但不应将它们检入到 git 等版本控制系统中。
在本文中,我们讨论了一些关于这些文件为何存在的问题。我们还介绍了一些简单的技术,以确保不签入这些文件,并在您希望的情况下递归地删除它们。我们将介绍本地可能遇到的问题以及处理版本控制文件时可能出现的问题。
Python 为什么要编译文件?python不是解释型语言吗?
关于 Python 缓存文件的一个常见误解是它们为什么会存在,因为 Python 应该是一种“解释型”语言。然而,如果我们花时间更清楚地理解当我们谈论编译和解释时的含义,这种混淆在很大程度上就会消失。
编译语言的一个很好的例子是 C 语言。C 程序最常见的运行方式是将它们从 C 直接编译成机器代码,然后与其他 C 文件和启动代码链接以创建独立的可执行文件。生成可执行文件后,它会直接在机器上运行——无需将用于生成程序的 C 编译器交付给用户。
相比之下,像 Python 这样的解释型语言要求你有解释器来运行程序,因为它不是由机器直接运行的。相反,它由解释器运行,解释器通常将程序翻译成中间的东西,称为字节码。令人困惑的地方在于,解释性语言还将将源文件转换为字节码的内置或独立工具称为“编译器”。在标准 Python (CPython) 中,单个可执行文件既充当源代码“编译器”,又充当编译字节码的解释器(有时可以以“pyc”文件的形式缓存到磁盘)。
在其他语言中,例如 Java,编译器和解释器是独立的程序。Java 程序首先使用“javac”可执行文件编译为 Java 虚拟机字节码,然后使用“java”可执行文件运行编译后的 java 字节码。
因此,即使在某些情况下(例如,导入的包)将 Python 编译为字节码,编译后的字节码仍然不能由机器直接运行——它需要一个解释器。
如何递归删除缓存的 Python 文件
有时,我们可能还需要通过删除 *.pyc 文件和 pycache 目录来使本地项目文件进入干净状态。根据你的操作系统,有不同的方法可以完成此操作。例如,在基于 Mac 或 Linux 的系统上,可以根据需要将以下内容(自定义一个shell脚本函数)添加到 ~/.bashrc 或 ~/.zshrc。
pyclean () {
find . -type f -name "*.py[co]" -delete
find . -type d -name "__pycache__" -delete
}
如果在同一个终端窗口中,则需要运行 source ~/.bashrc (例如)。加载此 bash 函数后,只需转到目录并运行 pyclean, 这一般是我要的方法。
猜你喜欢
- 2024-10-12 这个为生信学习打造的开源Bash教程真香!!(目录更新)
- 2024-10-12 Shell 函数(杰哥教你Linux) shell中函数
- 2024-10-12 Linux下程序是怎样执行的 linux怎么执行程序
- 2024-10-12 这几个常用 alias,带你高效做事(下)
- 2024-10-12 Shell脚本:函数语法以及实例讲解 shell脚本入门详解
- 2024-10-12 Linux 之 bash 编程 linux bash-4.1
- 2024-10-12 Bash函数:ucase、lcase:借助perl一键转换字符串为大小或小写
- 2024-10-12 Bash Shell制作菜单3部曲:1简单交互菜单|Linux|运维|嵌入式
- 2024-10-12 Bash脚本中的用户交互:暂停、等待按键和倒计时的实现方法
- 2024-10-12 bash问题:是否有函数可以返回字符串的长度?
- 最近发表
-
- 自动脚本操作流程(自动脚本怎么做)
- Ubuntu系统存在严重漏洞,几句命令轻松攻破root权限
- redis实现分布式锁(redis实现分布式锁的原理)
- Linux系统移植之—uboot移植,你们要的uboot终于来了,堪称精品
- powershell 后台运行命令(如何在powershell运行程序)
- 生产环境H200部署DeepSeek 671B 满血版实战(三):SGLang 安装详解
- OpenWrt 小白常用命令大全(openwrt操作命令)
- Linux-shell脚本多线程实现(shell 多线程并发执行)
- Thread.sleep(0):线程休眠0秒有什么意义?
- 40 个简单又有效的 Linux Shell 脚本示例
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)