Hi Armin,

Thank you for your explanation.

I've now managed to build 2.7 and 3.5 deterministic by recompiling the bytecode at the end of the build (and excluding 2to3).

Freddy


On Sun, Feb 19, 2017 at 9:30 AM, Armin Rigo <armin.rigo@gmail.com> wrote:
Hi Freddy,

On 16 February 2017 at 18:03, Freddy Rietdijk <freddyrietdijk@fridh.nl> wrote:
> As I mentioned, it seems only sets cause unreproducible
> bytecode. Sets have no order. But when generating the bytecode, I would
> expect there would still be an order since the code isn't actually executed,
> right?

No, the sets are built as real sets and then marshalled to .pyc files
in a separate step.  So on CPython an essentially random order will
end up in the .pyc file.  Even CPython 3.6 gives a deterministic order
to dictionaries but not sets.  You could ensure sets are marshalled in
a known order by changing the marshalling code, e.g. to emit them in
sorted order (on Python 2.x; on 3.x it is more messy because different
types are more often non-comparable).


A bientôt,

Armin.