So yesterday we had a fun time as soon as we pushed some code that uses pyopenssl: our deploy build started crashing from an IOError in a call to open(filename, 'w')
—in ply.lex
, of all places.
-
Why on earth are we using ply?
-
Turns out pyopenssl depends on cryptography, which depends on cffi, which depends on pycparser, which depends on ply.
-
Why on earth is ply writing out to disk?
-
Turns out ply attempts to write out intermediate results as an optimization to avoid redundant work.
-
Why don't we see these files on our dev machines?
-
ply also cleans up its intermediate result files immediately after it runs;
fswatch . | grep lextab.py
confirms that the writes are happening locally.