我來自Java背景,在Python中是全新的。如何用pickle文件組織Python項目?
現在我已經有一個Python項目,它包含幾個Python腳本和存儲在Git中的pickle
文件。泡菜文件是序列號sklearn模型。
我想知道如何組織這個項目。我認爲我們不應該在Git中存儲pickle文件。我們應該將它們作爲二進制依賴關係存儲在某處。
它有道理嗎?什麼是存儲Python項目的二進制依賴關係的常見方法
我來自Java背景,在Python中是全新的。如何用pickle文件組織Python項目?
現在我已經有一個Python項目,它包含幾個Python腳本和存儲在Git中的pickle
文件。泡菜文件是序列號sklearn模型。
我想知道如何組織這個項目。我認爲我們不應該在Git中存儲pickle文件。我們應該將它們作爲二進制依賴關係存儲在某處。
它有道理嗎?什麼是存儲Python項目的二進制依賴關係的常見方法
Git對二進制數據來說很好。例如,許多項目例如存儲git repos中的圖像。
我猜,經驗法則是決定何時你的二進制文件是源材料,外部依賴或中間構建步驟。當然,沒有嚴格的規定,所以只要決定你對他們的感受。這裏是我的建議:
如果他們(可重複)的東西產生,.gitignore
二進制文件,並有建立必要的數據的腳本。它可以在同一個或單獨的回購 - 取決於它感覺最好的地方。
如果從某些外部來源獲得相同的邏輯,例如,外部下載。通常,我們不在存儲庫中存儲依賴關係 - 我們只保留對它們的引用。例如。我們不保留virtualenvs,但只有requirements.txt文件 - Java世界的類比(粗略近似)就像沒有.jars,但只包含build.gradle中的pom.xml或依賴項部分。
如果它們可以被認爲是源材料,例如如果你使用Python作爲編輯器來操作它們 - 不要擔心文件的二進制特性,只需將它們放在存儲庫中即可。
如果它們不是真的來源材料,但它們的生成過程非常複雜或需要很長時間,並且這些文件不打算定期更新 - 我認爲這不會很糟糕錯誤地讓他們回購。當然,留下關於如何生成文件的說明(README.txt或某些內容)將是一個好主意。
哦,如果文件較大(如,百兆以上的),考慮考慮看看的git-LFS。
閱讀[安全性和可維護性限制](http://scikit-learn.org/stable/modules/model_persistence.html#security-maintainability-limitations)會讓我對使用pickle感到厭倦。 –