【问题标题】:How to organize a Python project with pickle files?如何使用 pickle 文件组织 Python 项目?
【发布时间】:2017-05-07 12:04:41
【问题描述】:

我来自 Java 背景,对 Python 完全陌生。

现在我有一个 Python 项目,其中包含一些 Python 脚本和存储在 Git 中的 pickle 文件。 pickle 文件是序列化的sklearn 模型。

我想知道如何组织这个项目。我认为我们不应该将泡菜文件存储在 Git 中。我们可能应该将它们作为二进制依赖项存储在某个地方。

这有意义吗? Python项目二进制依赖的常用存储方式是什么

【问题讨论】:

标签: python git pickle


【解决方案1】:

Git 可以处理二进制数据。例如,许多项目存储例如git repos 中的图片。

我猜,经验法则是决定您的二进制文件是源材料、外部依赖还是中间构建步骤。当然,没有严格的规则,所以只要决定你对它们的感觉。以下是我的建议:

  1. 如果它们(可重复地)从某些东西生成,.gitignore 二进制文件并具有构建必要数据的脚本。它可以在同一个仓库中,也可以在单独的仓库中——这取决于感觉最好的地方。

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

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

  4. 如果它们不是真正的源材料,但它们的生成过程确实很复杂或需要很长时间,并且这些文件不打算定期更新 - 我认为不会将它们放在回购中是非常错误的。当然,留下关于文件是如何生成的注释(README.txt 或其他内容)是个好主意。

哦,如果文件很大(例如,数百兆字节或更多),请考虑查看 git-lfs。

【讨论】:

  • 谢谢。你的回复对我来说很有意义。这些 pickle 二进制文件是作为某些手动过程的一部分在内部生成的。文件大小约为 5 - 10M。它们在几个月内更新一次。看起来我们可以将它们保存在 git 中。
  • @Michael:您还可以考虑将二进制文件保存在第二个 Git 存储库或某种非 Git 系统(甚至不像 LFS 这样的混合系统)中。正如 drdaeman 所说,没有严格的规则:您只需要不仅在最初而且在项目的未来中都能很好地工作的东西。每 3 个月 10 MB 大约是每年 40 MB,这足够合理,但它们会随着时间的推移而增长吗?这可能会以某种方式推动决定。
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 2017-03-04
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多