More fixes for PEP 3147 compliance in packaging (#11254)

This commit is contained in:
Éric Araujo 2011-10-19 08:18:05 +02:00
parent 8ccd18fff3
commit 4b5a5f7bd5
4 changed files with 51 additions and 8 deletions

View file

@ -1,6 +1,7 @@
"""Build pure Python modules (just copy to build directory).""" """Build pure Python modules (just copy to build directory)."""
import os import os
import imp
import sys import sys
from glob import glob from glob import glob
@ -330,9 +331,10 @@ class build_py(Command, Mixin2to3):
outputs.append(filename) outputs.append(filename)
if include_bytecode: if include_bytecode:
if self.compile: if self.compile:
outputs.append(filename + "c") outputs.append(imp.cache_from_source(filename))
if self.optimize > 0: if self.optimize > 0:
outputs.append(filename + "o") outputs.append(imp.cache_from_source(filename,
debug_override=False))
outputs += [ outputs += [
os.path.join(build_dir, filename) os.path.join(build_dir, filename)

View file

@ -1,6 +1,7 @@
"""Install all modules (extensions and pure Python).""" """Install all modules (extensions and pure Python)."""
import os import os
import imp
import sys import sys
import logging import logging
@ -172,9 +173,10 @@ class install_lib(Command):
if ext != PYTHON_SOURCE_EXTENSION: if ext != PYTHON_SOURCE_EXTENSION:
continue continue
if self.compile: if self.compile:
bytecode_files.append(py_file + "c") bytecode_files.append(imp.cache_from_source(py_file))
if self.optimize > 0: if self.optimize > 0:
bytecode_files.append(py_file + "o") bytecode_files.append(imp.cache_from_source(
py_file, debug_override=False))
return bytecode_files return bytecode_files

View file

@ -102,6 +102,40 @@ class BuildPyTestCase(support.TempdirManager,
os.chdir(cwd) os.chdir(cwd)
sys.stdout = old_stdout sys.stdout = old_stdout
@unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
def test_byte_compile(self):
project_dir, dist = self.create_dist(py_modules=['boiledeggs'])
os.chdir(project_dir)
self.write_file('boiledeggs.py', 'import antigravity')
cmd = build_py(dist)
cmd.compile = True
cmd.build_lib = 'here'
cmd.finalize_options()
cmd.run()
found = os.listdir(cmd.build_lib)
self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py'])
found = os.listdir(os.path.join(cmd.build_lib, '__pycache__'))
self.assertEqual(found, ['boiledeggs.%s.pyc' % imp.get_tag()])
@unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
def test_byte_compile_optimized(self):
project_dir, dist = self.create_dist(py_modules=['boiledeggs'])
os.chdir(project_dir)
self.write_file('boiledeggs.py', 'import antigravity')
cmd = build_py(dist)
cmd.compile = True
cmd.optimize = 1
cmd.build_lib = 'here'
cmd.finalize_options()
cmd.run()
found = os.listdir(cmd.build_lib)
self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py'])
found = os.listdir(os.path.join(cmd.build_lib, '__pycache__'))
self.assertEqual(sorted(found), ['boiledeggs.%s.pyc' % imp.get_tag(),
'boiledeggs.%s.pyo' % imp.get_tag()])
def test_dont_write_bytecode(self): def test_dont_write_bytecode(self):
# makes sure byte_compile is not used # makes sure byte_compile is not used
pkg_dir, dist = self.create_dist() pkg_dir, dist = self.create_dist()
@ -118,6 +152,7 @@ class BuildPyTestCase(support.TempdirManager,
self.assertIn('byte-compiling is disabled', self.get_logs()[0]) self.assertIn('byte-compiling is disabled', self.get_logs()[0])
def test_suite(): def test_suite():
return unittest.makeSuite(BuildPyTestCase) return unittest.makeSuite(BuildPyTestCase)

View file

@ -1,6 +1,7 @@
"""Tests for packaging.command.install.""" """Tests for packaging.command.install."""
import os import os
import imp
import sys import sys
from sysconfig import (get_scheme_names, get_config_vars, from sysconfig import (get_scheme_names, get_config_vars,
_SCHEMES, get_config_var, get_path) _SCHEMES, get_config_var, get_path)
@ -181,9 +182,11 @@ class InstallTestCase(support.TempdirManager,
def test_old_record(self): def test_old_record(self):
# test pre-PEP 376 --record option (outside dist-info dir) # test pre-PEP 376 --record option (outside dist-info dir)
install_dir = self.mkdtemp() install_dir = self.mkdtemp()
project_dir, dist = self.create_dist(scripts=['hello']) project_dir, dist = self.create_dist(py_modules=['hello'],
scripts=['sayhi'])
os.chdir(project_dir) os.chdir(project_dir)
self.write_file('hello', "print('o hai')") self.write_file('hello.py', "def main(): print('o hai')")
self.write_file('sayhi', 'from hello import main; main()')
cmd = install_dist(dist) cmd = install_dist(dist)
dist.command_obj['install_dist'] = cmd dist.command_obj['install_dist'] = cmd
@ -196,8 +199,9 @@ class InstallTestCase(support.TempdirManager,
content = f.read() content = f.read()
found = [os.path.basename(line) for line in content.splitlines()] found = [os.path.basename(line) for line in content.splitlines()]
expected = ['hello', 'METADATA', 'INSTALLER', 'REQUESTED', 'RECORD'] expected = ['hello.py', 'hello.%s.pyc' % imp.get_tag(), 'sayhi',
self.assertEqual(found, expected) 'METADATA', 'INSTALLER', 'REQUESTED', 'RECORD']
self.assertEqual(sorted(found), sorted(expected))
# XXX test that fancy_getopt is okay with options named # XXX test that fancy_getopt is okay with options named
# record and no-record but unrelated # record and no-record but unrelated