避免陈旧* .pyc文件的最佳方法?

时间:2014-12-24 02:39:05

标签: python git version-control

避免陈旧* .pyc文件的最佳方法是什么?有时,特别是在版本控制中切换分支时,一些* .pyc文件留在那里,并由Python使用,而不是我使用的源文件。

确保我不创建或不知情地使用陈旧的* .pyc文件的最佳策略是什么?

4 个答案:

答案 0 :(得分:2)

与khampson类似,git和mercurial(可能还有其他人)允许客户端钩子。您可以使用

的脚本
find -iname "*.pyc" -exec rm -f {} \; 
至少在Linux上

搜索" git hooks"和" mercurial hooks"了解更多详情。

答案 1 :(得分:2)

有一个有用的环境变量:PYTHONDONTWRITEBYTECODE

export PYTHONDONTWRITEBYTECODE=true

答案 2 :(得分:1)

我建议采用综合方法。

首先,将*.pyc添加到 .gitignore 文件中,这有助于避免在切换分支时出现问题(至少在原因是某个.pyc文件以某种方式提交的情况下) )。我通常会将*.pyc*.log同时添加到我的 .gitignore 中,以免意外提交任何这些文件,因此它们不会使我的{{1输出。

其次,创建一个包装器shell脚本,首先删除所有git status文件(如果源目录结构调用它,则递归),然后调用您的实际脚本。这应该确保使用当前源新创建任何生成的.pyc文件。

即。类似的东西(如果你想让脚本等待,则没有.pyc):

&

答案 3 :(得分:1)

另一种解决方案是imp.reload()。我认为在2.7中您可以执行以下操作(稍后检查)

>>> import sys
>>> reload(sys)
  <module 'sys' (built-in)>
>>>

此方法的缺点是* .pyc文件的版本仍将存储在存储库中,并在每次提交时更新。但是,它可以保护您免受陈旧版本* .pyc。

的影响

另一个解决方案是使git ignore * .pyc文件以及删除它们。另一种解决方案是忽略 pycache 目录。来自Mark Lutz的书:

  

在3.2及更高版本中,Python将其.pyc字节代码文件保存在   子目录命名    pycache 位于源文件所在的目录中,以及名称标识创建它们的Python版本的文件中   (例如,script.cpython-33.pyc)。新的 pycache 子目录有帮助   避免混乱,以及字节代码文件的新命名约定   防止在同一台计算机上安装不同的Python版本   覆盖彼此保存的字节码。