1
我有一個Python項目與自己的需求文件。該項目也有自己的virtualenv,其中一個包是'pyPdf'。這個庫有一個bug,我寫了一個補丁來修復這個bug。瑕疵Bash腳本的補丁和需求文件
--- 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 venv/local/lib/python2.7/site-packages/pyPdf/pdf.py < pypdf.patch
我需要寫一個bash腳本做兩件事情與冪等財產(指運行腳本多次應與運行一個單一時間)
1)通過要求文件運行滿足各種庫需求(例如Flask == 0.10.1等,包括git + ssh需求)併爲所有庫進行pip安裝。
2)將補丁應用到pypdf庫。
欣賞這方面的任何線索。請注意'冪等'。
PS:我requirements.txt文件看起來像這樣(我做了PIP安裝 - R的requirements.txt的virtualenv中下安裝程序庫)
Flask==0.10.1
Jinja2==2.7.3
...
pyPdf==1.13
git+ssh://[email protected]/some-production-library.git
感謝
瀏覽需求文件是微不足道的。我相信它只是模擬「pip install -r要求」,即逐行執行「pip install」。在這裏提到的版本號已經是冪等的了。 我不知道如何爲補丁做同樣的事情。我嘗試過的一種方法是將更正後的文件永久複製到項目目錄中。對於修補,請對庫文件執行「diff」操作,並且僅在存在diff時應用修補程序。我把它設置了幾分鐘,但不知道這是否是正確的方法。如果有更好的解決方案,將會很感激迴應。 – vestronge
我沒有爲你編碼,但我會給你一個提示補丁。如果Reverse可能,則查看'-R'和'--dry-run',這意味着該補丁已經被應用。空運行是模擬,只有文件不會被改變。 – Tiago
真棒謝謝..這應該解決問題。更清潔的解決方案。謝謝 – vestronge