独自の要件ファイルを持つ python プロジェクトがあります。プロジェクトには独自の virtualenv もあり、パッケージの 1 つが「pyPdf」です。ライブラリにはバグがあり、バグを修正するパッチを書きました。
--- venv/local/lib/python2.7/site-packages/pyPdf/pdf.py 2014-07-17 17:04:57.000000000 +0530
+++ pypdf_fixer.py 2014-07-19 01:19:53.176877332 +0530
@@ -1726,7 +1726,10 @@
m.update(p_entry)
# 5. Pass the first element of the file's file identifier array to the MD5
# hash function.
- m.update(id1_entry)
+ if isinstance(id1_entry, str):
+ m.update(id1_entry)
+ else:
+ m.update(id1_entry.original_bytes)
# 6. (Revision 3 or greater) If document metadata is not being encrypted,
# pass 4 bytes with the value 0xFFFFFFFF to the MD5 hash function.
if rev >= 3 and not metadata_encrypt:
このファイルを pypdf.patch と呼びましょう。Linux patch コマンドを使用してパッチを実行します。
$ patch venv/local/lib/python2.7/site-packages/pyPdf/pdf.py < pypdf.patch
Idempotent プロパティを使用して 2 つのことを行うには、bash スクリプトを作成する必要があります (つまり、スクリプトを複数回実行することは、1 回実行することと同じである必要があります)。
1)さまざまなライブラリ要件(git + ssh要件を含むFlask == 0.10.1など)を含む要件ファイルを実行し、すべてのライブラリに対してpipインストールを実行します。
2) pypdf ライブラリにパッチを適用します。
この面でのリードに感謝します。「冪等性」に注意してください。
PS: 私の requirements.txt ファイルは次のようになります (ライブラリをインストールするために、virtualenv の下で pip install - r requirements.txt を実行します)。
Flask==0.10.1
Jinja2==2.7.3
...
pyPdf==1.13
git+ssh://git@something.co.uk/some-production-library.git
ありがとう