2017-05-07 35 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