2017-05-07 37 views
2

我来自Java背景,在Python中是全新的。如何用pickle文件组织Python项目?

现在我已经有一个Python项目,它包含几个Python脚本和存储在Git中的pickle文件。泡菜文件是序列号sklearn模型。

我想知道如何组织这个项目。我认为我们不应该在Git中存储pickle文件。我们应该将它们作为二进制依赖关系存储在某处。

它有道理吗?什么是存储Python项目的二进制依赖关系的常见方法

+0

阅读[安全性和可维护性限制](http://scikit-learn.org/stable/modules/model_persistence.html#security-maintainability-limitations)会让我对使用pickle感到厌倦。 –

回答

3

Git对二进制数据来说很好。例如,许多项目例如存储git repos中的图像。

我猜,经验法则是决定何时你的二进制文件是源材料,外部依赖或中间构建步骤。当然,没有严格的规定,所以只要决定你对他们的感受。这里是我的建议:

  1. 如果他们(可重复)的东西产生,.gitignore二进制文件,并有建立必要的数据的脚本。它可以在同一个或单独的回购 - 取决于它感觉最好的地方。

  2. 如果从某些外部来源获得相同的逻辑,例如,外部下载。通常,我们不在存储库中存储依赖关系 - 我们只保留对它们的引用。例如。我们不保留virtualenvs,但只有requirements.txt文件 - Java世界的类比(粗略近似)就像没有.jars,但只包含build.gradle中的pom.xml或依赖项部分。

  3. 如果它们可以被认为是源材料,例如如果你使用Python作为编辑器来操作它们 - 不要担心文件的二进制特性,只需将它们放在存储库中即可。

  4. 如果它们不是真的来源材料,但它们的生成过程非常复杂或需要很长时间,并且这些文件不打算定期更新 - 我认为这不会很糟糕错误地让他们回购。当然,留下关于如何生成文件的说明(README.txt或某些内容)将是一个好主意。

哦,如果文件较大(如,百兆以上的),考虑考虑看看的git-LFS。

+0

谢谢。你的回复对我来说很有意义。这些泡菜二进制文件是内部生成的,作为一些手动过程的一部分。文件大小是〜5 - 10M。他们在几个月内更新一次。看起来我们可以将它们保持在git中。 – Michael

+1

@Michael:您可能还会考虑将二进制文件保留在第二个Git存储库或某种非Git系统(甚至不像LFS那样混合)。正如Drdaeman所说,没有严格的规定:你只是想要一些最初不会起作用的东西,但是要放在项目的未来。每3个月10 MB大约每年40 MB,这足够合理,但它们会随着时间的推移而增长吗?这可能会以这种或那种方式推动决策。 – torek