当Django或python与Mercurial一起使用时,如何处理pyc文件?

时间:2012-06-06 18:58:43

标签: python django mercurial pyc

刚开始使用Mercurial。哇,很好的应用程序。我将数据库文件移出代码目录,但我想知道.pyc文件。我没有在初始提交中包含它们。有关.hgignore文件的文档包含一个排除*.pyc的示例,因此我认为我处于正确的轨道上。

我想知道当我决定回滚到旧的文件集时会发生什么。我是否需要删除所有.pyc文件?我在Stack Overflow上看到了一些关于这个问题的问题,包括一位发现旧.pyc文件被使用的绅士。围绕这个的标准方法是什么?

4 个答案:

答案 0 :(得分:14)

如ms4py的回答所述,* .pyc是将动态重新生成的编译文件。分发项目时,您不希望包含这些内容。

然而,如果它发生了你回滚更改之前存在的模块并且* .pyc文件留在周围,可能会出现奇怪的错误,因为即使原始的python文件不再存在也可以执行pyc文件。当在项目中添加和删除应用程序并使用git切换分支时,这在Django中咬了几次。

要清理,您可以通过在项目目录中运行以下shell命令来删除项目目录中的每个编译文件:

find . -name '*.pyc' -exec rm {} \;

答案 1 :(得分:5)

通常您是安全的,因为如果相应的*.pyc更改其内容,则会重新生成*.py

如果您删除*.py文件并且仍在其他文件中导入,则会出现问题。在这种情况下,您将从*.pyc文件导入(如果存在)。但这将是您的代码中的错误,并不是与您的mercurial工作流程真正相关。

结论:每个着名的Python库都忽略了他们的*.pyc文件,只需这样做;)

答案 2 :(得分:3)

有关更一般的解决方案,请询问 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带有一个类似的purge extension

$ hg purge --all

将删除未跟踪和忽略的文件。如果您没有丢失未跟踪的文件,那么该命令对您来说可能是最简单的,特别是因为它也适用于可能很难找到xargs的Windows。

答案 3 :(得分:0)

当然,如果你有同一模块的旧版本的.pyc文件,python将使用它。很多时候我想知道为什么我的程序没有反映我所做的更改,并意识到这是因为我有旧的pyc文件。

如果这意味着.pyc没有反映您当前的版本,则是,您必须删除所有.pyc个文件。

如果您使用的是Linux,则可以find . -name *.pyc -delete