1

我有一个带有自己的需求文件的 python 项目。该项目还有自己的 virtualenv,其中一个包是“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

我需要编写一个 bash 脚本来使用幂等属性做两件事(意味着多次运行脚本应该与一次运行相同)

1) 运行具有各种库要求的要求文件(例如 Flask==0.10.1 等,包括 git+ssh 要求)并对所有库进行 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

谢谢

4

1 回答 1

0

对于那些正在寻找类似脚本的人。将脚本保存在 projectfolder/bin/

#!/bin/bash -e

BASEDIR=`dirname $0`/..

if [ ! -d "$BASEDIR/venv" ]; then
    virtualenv $BASEDIR/venv
    echo "Virtualenv created with name venv."
fi

source $BASEDIR/venv/bin/activate

if [ ! -f "$BASEDIR/venv/updated" -o $BASEDIR/requirements.txt -nt $BASEDIR/venv/updated ]; then
    pip install -r $BASEDIR/requirements.txt
    touch $BASEDIR/venv/updated
    echo "Requirements installed."
fi

patch $BASEDIR/venv/local/lib/python2.7/site-packages/pyPdf/pdf.py -p0 -N --dry-run --silent < $BASEDIR/pypdf.patch
if [ $? -eq 0 ];
then
    echo "applying patch"
    #apply the patch
    patch $BASEDIR/venv/local/lib/python2.7/site-packages/pyPdf/pdf.py -p0 -N < $BASEDIR/pypdf.patch
fi
于 2014-07-26T17:49:29.660 回答