Issue #12618: py_compile cannot create files in current directory

Initial patch by Sjoerd de Vries.
This commit is contained in:
Meador Inge 2011-11-28 09:34:47 -06:00
commit 31b798d3c8
4 changed files with 16 additions and 1 deletions

View file

@ -130,7 +130,9 @@ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1):
else: else:
cfile = imp.cache_from_source(file) cfile = imp.cache_from_source(file)
try: try:
os.makedirs(os.path.dirname(cfile)) dirname = os.path.dirname(cfile)
if dirname:
os.makedirs(dirname)
except OSError as error: except OSError as error:
if error.errno != errno.EEXIST: if error.errno != errno.EEXIST:
raise raise

View file

@ -39,6 +39,15 @@ class PyCompileTests(unittest.TestCase):
py_compile.compile(self.source_path) py_compile.compile(self.source_path)
self.assertTrue(os.path.exists(self.cache_path)) self.assertTrue(os.path.exists(self.cache_path))
def test_cwd(self):
cwd = os.getcwd()
os.chdir(self.directory)
py_compile.compile(os.path.basename(self.source_path),
os.path.basename(self.pyc_path))
os.chdir(cwd)
self.assertTrue(os.path.exists(self.pyc_path))
self.assertFalse(os.path.exists(self.cache_path))
def test_relative_path(self): def test_relative_path(self):
py_compile.compile(os.path.relpath(self.source_path), py_compile.compile(os.path.relpath(self.source_path),
os.path.relpath(self.pyc_path)) os.path.relpath(self.pyc_path))

View file

@ -1014,6 +1014,7 @@ Kannan Vijayan
Kurt Vile Kurt Vile
Norman Vine Norman Vine
Frank Visser Frank Visser
Sjoerd de Vries
Niki W. Waibel Niki W. Waibel
Wojtek Walczak Wojtek Walczak
Charles Waldman Charles Waldman

View file

@ -395,6 +395,9 @@ Core and Builtins
Library Library
------- -------
- Issue #12618: Fix a bug that prevented py_compile from creating byte
compiled files in the current directory. Initial patch by Sjoerd de Vries.
- Issue #13444: When stdout has been closed explicitly, we should not attempt - Issue #13444: When stdout has been closed explicitly, we should not attempt
to flush it at shutdown and print an error. to flush it at shutdown and print an error.