그래서 큰 zip 파일을 만들 수있는 make_archive 함수에 최근 수정 사항을 사용하기 위해 shutil 모듈을 monkeypatch하려고합니다.왜 몽둥이가 시끄럽게 움직이지 않으려 고 시도하는 것이 효과가 없습니까?
나는 개념적으로 뭔가를 증명하고 있으므로이 문제를 해결하기위한 빠른 해킹을 생각하면 내가하고 싶은 일에 착수 할 수 있습니다.
내 코드 :
import shutil
import os
def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None):
zip_filename = base_name + ".zip"
archive_dir = os.path.dirname(base_name)
if not os.path.exists(archive_dir):
if logger is not None:
logger.info("creating %s", archive_dir)
if not dry_run:
os.makedirs(archive_dir)
# If zipfile module is not available, try spawning an external 'zip'
# command.
try:
import zipfile
except ImportError:
zipfile = None
if zipfile is None:
shutil._call_external_zip(base_dir, zip_filename, verbose, dry_run)
else:
if logger is not None:
logger.info("creating '%s' and adding '%s' to it",
zip_filename, base_dir)
if not dry_run:
zip = zipfile.ZipFile(zip_filename, "w",
compression=zipfile.ZIP_DEFLATED,
allowZip64=True) # this is the extra argument
for dirpath, dirnames, filenames in os.walk(base_dir):
for name in filenames:
path = os.path.normpath(os.path.join(dirpath, name))
if os.path.isfile(path):
zip.write(path, path)
if logger is not None:
logger.info("adding '%s'", path)
zip.close()
shutil._make_zipfile = _make_zipfile
# This function calls _make_zipfile when it runs
shutil.make_archive('blah', someargs)
그래서 문제는 ... 그것은 아무것도하지 않습니다. 나는 분명히 어리석은 짓을하고있다. 그러나 내 인생에서 나는 그것이 무엇인지를 볼 수 없다. 나는 오랫동안 그것을보고 난 후에 장님이되었다는 것을 명백한 것이 있다고 가정하고 있으므로 신선한 눈이 필요합니다. 나는이 설명 답변에 대해 확인/방법을 다음과 같은 시도 :
Monkey-patch Python class Python monkey patch private function 및
플러스 일부 다른 What is a monkey patch?. 기쁨 없음
당신은 아주 좋은 사람입니다. 나는 그 라인을보고 이상하게 여겼지 만, _make_zipfile 함수를 패치하는 3 가지 동등한 방법을 시도하는 무한 루프에 갇혀있다. 아, 카페인이 충분하지 않거나 너무 많습니다. –
+++ CAFFEINE ERROR +++ REDO from START +++ 16 진수가 말한대로. –