I suspect this isn’t possible, unfortunately. Looking at test_hash.py
the HashRandomizationTests
class and its descendants were added in the commit that introduced this behavior. They test the hashing behavior by modifying the environment and starting a new process with PYTHONHASHSEED
explicitly set. You could try to copy that pattern, perhaps.
I also just noticed you said “Every time I run my script, dict contents are iterated in a different order.” – I assume you’re aware of collections.OrderedDict
, right? That’s the normal way to get reliable hash iteration.
If you’re willing to set the value in your shell environment, you could also just wrap your python call in a bash script, e.g.
#! /bin/bash
export PYTHONHASHSEED=0
# call your python program here
That avoids needing to manipulate your whole environment, as long as you’re ok with a wrapper script.
Or even just pass the value on the command line:
$ PYTHONHASHSEED=0 python YOURSCRIPT.py