[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#22533: Non-determinism in python-3 ".pyc" bytecode
From: |
Ludovic Courtès |
Subject: |
bug#22533: Non-determinism in python-3 ".pyc" bytecode |
Date: |
Tue, 02 Feb 2016 21:41:19 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Leo Famulari <address@hidden> skribis:
> We fixed this in python-2 with the patch
> python-2.7-source-date-epoch.patch, but I don't know how to write this
> patch for python-3.
I would imagine something like this (untested):
--- Python-3.4.3/Lib/importlib/_bootstrap.py 2016-02-02 21:38:48.655809055
+0100
+++ Python-3.4.3/Lib/importlib/_bootstrap.py.new 2016-02-02
21:38:43.659769251 +0100
@@ -667,7 +667,10 @@ def _code_to_bytecode(code, mtime=0, sou
"""Compile a code object into bytecode for writing out to a byte-compiled
file."""
data = bytearray(MAGIC_NUMBER)
- data.extend(_w_long(mtime))
+ if 'SOURCE_DATE_EPOCH' in _os.environ:
+ data.extend(_w_long(string.atoi(_os.environ['SOURCE_DATE_EPOCH'])))
+ else:
+ data.extend(_w_long(mtime))
data.extend(_w_long(source_size))
data.extend(marshal.dumps(code))
return data
Could you give it a try and refine as needed? :-)
> I asked about this on #debian-reproducible and they said that it wasn't
> an issue for Debian since they don't ship bytecode, but instead generate
> it at install time. Of course, that doesn't really apply to Guix.
I’d recommend trying #reproducible-builds on OFTC, which is more
generic. Also, in some cases, it’s useful to look at
<git://git.debian.org/git/reproducible/notes.git>, which contains notes
about non-reproducible packages (currently partly Debian-specific, but
we need to lobby to make it more generic. ;-))
Thanks,
Ludo’.