刚开始使用 Mercurial。哇,不错的应用。我将我的数据库文件移出代码目录,但我想知道这些.pyc
文件。我没有将它们包含在初始提交中。有关该.hgignore
文件的文档包含一个要 exclude 的示例*.pyc
,因此我认为我走在正确的轨道上。
我想知道当我决定回滚到旧文件集时会发生什么。那我需要删除所有.pyc
文件吗?我在 Stack Overflow 上看到了一些关于这个问题的问题,包括一位发现旧.pyc
文件正在被使用的绅士。解决这个问题的标准方法是什么?
正如 ms4py 的回答中提到的, *.pyc 是已编译的文件,将即时重新生成。在分发项目时,您不希望包含这些内容。
但是,如果您在回滚更改之前存在模块并且 *.pyc 文件仍然存在,那么即使原始 python 文件不再存在,也可能会出现奇怪的错误,因为 pyc 文件可以执行。当在项目中添加和删除应用程序以及使用 git 切换分支时,这让我在 Django 中被咬了几次。
要清理这些内容,您可以通过在项目目录中运行以下 shell 命令来删除项目目录中的每个已编译文件:
find . -name '*.pyc' -exec rm {} \;
通常您是安全的,因为*.pyc
如果相应*.py
更改其内容,则会重新生成。
如果您删除一个*.py
文件并且您仍然从另一个文件中导入它,则会出现问题。*.pyc
在这种情况下,如果文件存在,您将从文件中导入。但这将是您的代码中的一个错误,并且与您的反复无常的工作流程没有真正的关系。
结论:每个著名的 Python 库都忽略了他们的*.pyc
文件,就去做吧;)
对于更通用的解决方案,请询问Mercurial 自己忽略哪些文件:
$ hg status --ignored
您可以使输出安全xargs
消费:
$ hg status --ignored --no-status -0 | xargs -0 -delete
(-0
处理名称中带有空格的文件很重要。)您可以将其安装为更新后挂钩:
[hooks]
post-update = hg status --ignored --no-status -0 | xargs -0 -delete
最后,Mercurial 带有一个清除扩展,它执行类似的操作:
$ hg purge --all
将删除未跟踪和忽略的文件。如果您对丢失未跟踪的文件感到满意,那么该命令对您来说可能是最简单的,特别是因为它也适用于xargs
可能难以获得的 Windows。
当然,如果您有.pyc
来自同一模块的旧版本的文件,python 会使用它。很多时候我想知道为什么我的程序没有反映我所做的更改,并意识到这是因为我有旧的 pyc 文件。
如果这意味着.pyc
不反映您当前的版本,那么是的,您将不得不删除所有.pyc
文件。
如果你在linux上,你可以find . -name *.pyc -delete