2017-05-07 4 views
2

私はJavaのバックグラウンドから来ており、Pythonでは全く新しいものです。pickleファイルを使用してPythonプロジェクトを構成するにはどうすればよいですか?

私はGitにいくつかのPythonスクリプトとpickleファイルを格納したPythonプロジェクトを持っています。 pickleファイルは、sklearnモデルのシリアル化されています。

このプロジェクトをどのように構成するのだろうか。ピクルファイルをGitに保存すべきではないと思います。おそらくどこかでバイナリ依存関係としてそれらを格納するべきです。

意味がありますか? Pythonプロジェクトのバイナリ依存関係を格納する一般的な方法は何ですか?

+0

[セキュリティとメンテナンスの制限](http://scikit-learn.org/stable/modules/model_persistence.html#security-maintainability-limitations)を読むと、ピクルスの使用に疲れてしまいます。 –

答えて

3

Gitはバイナリデータで問題ありません。例えば、多くのプロジェクトは、例えば、 git reposの画像

私の経験則では、バイナリファイルがソースマテリアル、外部依存関係、または中間ビルドステップであるときはいつでも決定することになります。もちろん、厳しい規則はありませんので、あなたがそれらについてどのように感じているかを決めるだけです。ここに私の提案は以下のとおりです。

  1. 彼らは(再現性)何か、.gitignoreからバイナリを生成し、必要なデータを構築するスクリプトを持っている場合。同じ場所にあっても別の場所にあっても、最高の気分になるでしょう。

  2. いくつかの外部ソースから取得された場合、同じロジックが適用されます。外部ダウンロード。通常、依存関係はリポジトリに格納されません。リポジトリへの参照のみが保持されます。例えば。私たちはvirtualenvsを持っていませんが、requirements.txtファイルしか持っていません - Javaの世界の類推は、.jarsを持たず、pom.xmlまたはbuild.gradleの依存関係セクションだけのような(おおよその近似)です。

  3. 例えば、それらがソース物質であると考えることができる。エディタとしてPythonでそれらを操作する場合、ファイルのバイナリの性質について心配せず、それらをあなたのリポジトリに入れてください。

  4. 実際にソース資料ではありませんが、生成プロセスが実際に複雑であるか、または非常に長くかかる場合、ファイルは定期的に更新されることはありません - ひどくないと思いますレポでそれらを持っている間違っている。ファイルがどのように生成されたかについてのメモ(README.txtなど)を残すことは、もちろん良い考えです。

ああ、ファイルが大きい(数百メガバイト以上のような)場合は、git-lfsを見てみることを検討してください。

+0

ありがとうございます。あなたの返信は私には大変な意味があります。これらのpickleバイナリは、いくつかの手動プロセスの一部として内部的に生成されます。ファイルサイズは5〜10Mです。数ヶ月後に更新されます。私たちはgitでそれらを保つことができるように見えます。 – Michael

+1

@Michael:2番目のGitリポジトリ、またはGit以外の何かのシステム(LFSのようなハイブリッドではない)にバイナリを保存することも考えられます。 Drdaemanによると、厳密なルールはありません。当初はもちろんのこと、プロジェクトの将来にもうまくいくものを求めています。 3 MBごとに10 MBは年間約40 MBですが、これは十分に妥当ですが、時間とともに成長する傾向がありますか?その決定を一方的に、あるいは別のものに押し進めるかもしれない。 – torek

関連する問題