62 Commits

Author SHA1 Message Date
Gregory Schevchenko
daff39070e bpo-38731: Add --quiet option to py_compile CLI (GH-17134) 2020-07-25 22:58:45 +03:00
Joannah Nanjekye
2e33ecd7c9 bpo-22640: Add silent mode to py_compile.compile() (GH-12976) 2019-05-28 19:29:04 +03:00
Elvis Pranskevichus
a6b3ec5b6d bpo-34022: Stop forcing of hash-based invalidation with SOURCE_DATE_EPOCH (GH-9607)
Unconditional forcing of ``CHECKED_HASH`` invalidation was introduced in
3.7.0 in bpo-29708.  The change is bad, as it unconditionally overrides
*invalidation_mode*, even if it was passed as an explicit argument to
``py_compile.compile()`` or ``compileall``.  An environment variable
should *never* override an explicit argument to a library function.
That change leads to multiple test failures if the ``SOURCE_DATE_EPOCH``
environment variable is set.

This changes ``py_compile.compile()`` to only look at
``SOURCE_DATE_EPOCH`` if no explicit *invalidation_mode* was specified.
I also made various relevant tests run with explicit control over the
value of ``SOURCE_DATE_EPOCH``.

While looking at this, I noticed that ``zipimport`` does not work
with hash-based .pycs _at all_, though I left the fixes for
subsequent commits.
2018-10-10 18:43:14 +02:00
Bernhard M. Wiedemann
ccbe5818af bpo-29708: Setting SOURCE_DATE_EPOCH forces hash-based .pyc files (GH-5200)
To support reproducible builds, the setting of of SOURCE_DATE_EPOCH triggers the py_compile module -- and by extension, compileall -- to forcibly compile with hash-based .pyc files. This eliminates the possibility of timestamp-based .pyc files which vary between builds.
2018-01-24 13:26:18 -08:00
Benjamin Peterson
42aa93b8ff closes bpo-31650: PEP 552 (Deterministic pycs) implementation (#4575)
Python now supports checking bytecode cache up-to-dateness with a hash of the
source contents rather than volatile source metadata. See the PEP for details.

While a fairly straightforward idea, quite a lot of code had to be modified due
to the pervasiveness of pyc implementation details in the codebase. Changes in
this commit include:

- The core changes to importlib to understand how to read, validate, and
  regenerate hash-based pycs.

- Support for generating hash-based pycs in py_compile and compileall.

- Modifications to our siphash implementation to support passing a custom
  key. We then expose it to importlib through _imp.

- Updates to all places in the interpreter, standard library, and tests that
  manually generate or parse pyc files to grok the new format.

- Support in the interpreter command line code for long options like
  --check-hash-based-pycs.

- Tests and documentation for all of the above.
2017-12-09 10:26:52 -08:00
Eric Snow
32439d6eb6 Issue #23911: Move path-based bootstrap code to a separate frozen module. 2015-05-02 19:15:18 -06:00
Berker Peksag
012e287081 Issue #23811: Add missing newline to the PyCompileError error message.
Patch by Alex Shkop.
2015-04-14 18:58:45 +03:00
Berker Peksag
34c9be7ebd Issue #23811: Add missing newline to the PyCompileError error message.
Patch by Alex Shkop.
2015-04-14 18:57:55 +03:00
Brett Cannon
f299abdafa Issue #23731: Implement PEP 488.
The concept of .pyo files no longer exists. Now .pyc files have an
optional `opt-` tag which specifies if any extra optimizations beyond
the peepholer were applied.
2015-04-13 14:21:02 -04:00
Brett Cannon
9674bd0a94 Issue #17222: fix a mix-up in some exception messages.
Reported by Arfrever Frehtes Taifersar Arahesis.
2013-06-17 17:48:30 -04:00
Brett Cannon
df960682a5 Issue #17177: Stop using imp with py_compile 2013-06-15 14:07:21 -04:00
Brett Cannon
33915eba7c Issue #17222: Raise FileExistsError when py_compile.compile would
overwrite a symlink or non-regular file with a regular file.
2013-06-14 18:33:00 -04:00
Brett Cannon
edfd6ae79c Issue #17244: Don't mask exceptions raised during the creation of
bytecode files in py_compile.

Thanks to Arfrever Frehtes Taifersar Arahesis for the bug report.
2013-04-14 12:48:15 -04:00
Brett Cannon
14581d5dc4 Port py_compile over to importlib 2013-01-26 08:48:36 -05:00
Andrew Svetlov
f7a17b48d7 Replace IOError with OSError (#16715) 2012-12-25 16:47:37 +02:00
Antoine Pitrou
5136ac0ca2 Issue #13645: pyc files now contain the size of the corresponding source
code, to avoid timestamp collisions (especially on filesystems with a low
timestamp resolution) when checking for freshness of the bytecode.
2012-01-13 18:52:16 +01:00
Meador Inge
22b9b37915 Issue #12618: py_compile cannot create files in current directory
Initial patch by Sjoerd de Vries.
2011-11-28 09:27:32 -06:00
Georg Brandl
8334fd9285 Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile. 2010-12-04 10:26:46 +00:00
Victor Stinner
58c0752a33 Issue #10335: Add tokenize.open(), detect the file encoding using
tokenize.detect_encoding() and open it in read only mode.
2010-11-09 01:08:59 +00:00
Benjamin Peterson
25216baf32 Create __pycache__ dir when the pyc path is explicitly given
Patch from Arfrever Frehtes Taifersar Arahesis.
2010-05-08 19:52:21 +00:00
Matthias Klose
1c994733bb Merged revisions 80274 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r80274 | matthias.klose | 2010-04-20 21:45:34 +0200 (Di, 20 Apr 2010) | 2 lines

  fix typo in r79533, introduced by the fix for issue #8233
........
2010-04-20 19:48:04 +00:00
Barry Warsaw
28a691b7fd PEP 3147 2010-04-17 00:19:56 +00:00
Barry Warsaw
d5f9bf5ecf - Issue #8233: When run as a script, py_compile.py optionally takes a single
argument `-` which tells it to read files to compile from stdin.  Each line
  is read on demand and the named file is compiled immediately.  (Original
  patch by Piotr Ożarowski).
2010-03-31 21:36:22 +00:00
Benjamin Peterson
5c86d45a52 Merged revisions 79070 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r79070 | benjamin.peterson | 2010-03-18 17:44:54 -0500 (Thu, 18 Mar 2010) | 1 line

  these lines can now be dispensed with
........
2010-03-18 22:55:53 +00:00
Benjamin Peterson
0088893447 kill py_compile's homemade encoding detection in favor of tokenize.detect_encoding() (see #8168) 2010-03-18 22:37:38 +00:00