刚开始使用Mercurial。哇,很好的应用程序。我将数据库文件移出代码目录,但我想知道.pyc
文件。我没有在初始提交中包含它们。有关.hgignore
文件的文档包含一个排除*.pyc
的示例,因此我认为我处于正确的轨道上。
我想知道当我决定回滚到旧的文件集时会发生什么。我是否需要删除所有.pyc
文件?我在Stack Overflow上看到了一些关于这个问题的问题,包括一位发现旧.pyc
文件被使用的绅士。围绕这个的标准方法是什么?
答案 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