Author: Armin Rigo <ar...@tunes.org> Branch: py3.5 Changeset: r90631:17d88d201da3 Date: 2017-03-11 17:10 +0100 http://bitbucket.org/pypy/pypy/changeset/17d88d201da3/
Log: Rename pypy-c -> pypy3-c and libpypy-c.so -> libpypy3-c.so. Also attempt to rename the final "pypy" binary to "pypy3". diff --git a/lib-python/3/subprocess.py b/lib-python/3/subprocess.py --- a/lib-python/3/subprocess.py +++ b/lib-python/3/subprocess.py @@ -1549,8 +1549,8 @@ def _pypy_install_libs_after_virtualenv(target_executable): # https://bitbucket.org/pypy/pypy/issue/1922/future-proofing-virtualenv # - # PyPy 2.4.1 turned --shared on by default. This means the pypy binary - # depends on the 'libpypy-c.so' shared library to be able to run. + # We have --shared on by default. This means the pypy binary + # depends on the 'libpypy3-c.so' shared library to be able to run. # The virtualenv code existing at the time did not account for this # and would break. Try to detect that we're running under such a # virtualenv in the "Testing executable with" phase and copy the @@ -1560,7 +1560,7 @@ 'copyfile' in caller.f_globals): dest_dir = sys.pypy_resolvedirof(target_executable) src_dir = sys.pypy_resolvedirof(sys.executable) - for libname in ['libpypy-c.so', 'libpypy-c.dylib']: + for libname in ['libpypy3-c.so', 'libpypy3-c.dylib']: dest_library = os.path.join(dest_dir, libname) src_library = os.path.join(src_dir, libname) if os.path.exists(src_library): diff --git a/lib-python/3/venv/__init__.py b/lib-python/3/venv/__init__.py --- a/lib-python/3/venv/__init__.py +++ b/lib-python/3/venv/__init__.py @@ -230,7 +230,7 @@ # # PyPy extension: also copy the main library, not just the # small executable - for libname in ['libpypy-c.so', 'libpypy-c.dylib']: + for libname in ['libpypy3-c.so', 'libpypy3-c.dylib']: dest_library = os.path.join(binpath, libname) src_library = os.path.join(os.path.dirname(context.executable), libname) diff --git a/pypy/conftest.py b/pypy/conftest.py --- a/pypy/conftest.py +++ b/pypy/conftest.py @@ -158,7 +158,7 @@ import sys options = getattr(sys, 'pypy_translation_info', None) if options is None: - py.test.skip("not running on translated pypy " + py.test.skip("not running on translated pypy3 " "(btw, i would need options: %s)" % (ropts,)) for opt in ropts: @@ -166,7 +166,7 @@ break else: return - py.test.skip("need translated pypy with: %s, got %s" + py.test.skip("need translated pypy3 with: %s, got %s" %(ropts,options)) class LazyObjSpaceGetter(object): diff --git a/pypy/goal/getnightly.py b/pypy/goal/getnightly.py --- a/pypy/goal/getnightly.py +++ b/pypy/goal/getnightly.py @@ -15,13 +15,13 @@ arch = 'linux' cmd = 'wget "%s"' TAR_OPTIONS += ' --wildcards' - binfiles = "'*/bin/pypy' '*/bin/libpypy-c.so'" + binfiles = "'*/bin/pypy3' '*/bin/libpypy3-c.so'" if os.uname()[-1].startswith('arm'): arch += '-armhf-raspbian' elif sys.platform.startswith('darwin'): arch = 'osx' cmd = 'curl -O "%s"' - binfiles = "'*/bin/pypy'" + binfiles = "'*/bin/pypy3'" else: print 'Cannot determine the platform, please update this script' sys.exit(1) diff --git a/pypy/goal/targetpypystandalone.py b/pypy/goal/targetpypystandalone.py --- a/pypy/goal/targetpypystandalone.py +++ b/pypy/goal/targetpypystandalone.py @@ -252,7 +252,7 @@ return pypy_optiondescription def target(self, driver, args): - driver.exe_name = 'pypy-%(backend)s' + driver.exe_name = 'pypy3-%(backend)s' config = driver.config parser = self.opt_parser(config) diff --git a/pypy/interpreter/app_main.py b/pypy/interpreter/app_main.py --- a/pypy/interpreter/app_main.py +++ b/pypy/interpreter/app_main.py @@ -1,5 +1,5 @@ #! /usr/bin/env python -# This is pure Python code that handles the main entry point into "pypy". +# This is pure Python code that handles the main entry point into "pypy3". # See test/test_app_main. # Missing vs CPython: -b, -d, -x @@ -169,7 +169,7 @@ raise SystemExit def get_sys_executable(): - return getattr(sys, 'executable', 'pypy') + return getattr(sys, 'executable', 'pypy3') def print_help(*args): import os @@ -516,12 +516,6 @@ (not options["ignore_environment"] and os.getenv('PYTHONINSPECT'))): options["inspect"] = 1 -## We don't print the warning, because it offers no additional security -## in CPython either (http://bugs.python.org/issue14621) -## if (options["hash_randomization"] or os.getenv('PYTHONHASHSEED')): -## print >> sys.stderr, ( -## "Warning: pypy does not implement hash randomization") - if we_are_translated(): flags = [options[flag] for flag in sys_flags] sys.flags = type(sys.flags)(flags) @@ -768,7 +762,7 @@ args = (runpy._run_module_as_main, '__main__', False) break else: - # That's the normal path, "pypy stuff.py". + # That's the normal path, "pypy3 stuff.py". # We don't actually load via SourceFileLoader # because we require PyCF_ACCEPT_NULL_BYTES loader = SourceFileLoader('__main__', filename) @@ -815,7 +809,7 @@ STDLIB_WARNING = """\ debug: WARNING: Library path not found, using compiled-in sys.path. debug: WARNING: 'sys.prefix' will not be set. -debug: WARNING: Make sure the pypy binary is kept inside its tree of files. +debug: WARNING: Make sure the pypy3 binary is kept inside its tree of files. debug: WARNING: It is ok to create a symlink to it from somewhere else.""" def setup_bootstrap_path(executable): diff --git a/pypy/interpreter/test/test_app_main.py b/pypy/interpreter/test/test_app_main.py --- a/pypy/interpreter/test/test_app_main.py +++ b/pypy/interpreter/test/test_app_main.py @@ -1,5 +1,5 @@ """ -Tests for the entry point of pypy-c, app_main.py. +Tests for the entry point of pypy3-c, app_main.py. """ from __future__ import with_statement import py @@ -1083,12 +1083,12 @@ from lib_pypy._pypy_interact import irc_header goal_dir = os.path.dirname(app_main) - # build a directory hierarchy like which contains both bin/pypy-c and - # lib/pypy1.2/* + # build a directory hierarchy like which contains both bin/pypy3-c and + # lib_pypy and lib-python prefix = udir.join('pathtest').ensure(dir=1) - fake_exe = 'bin/pypy-c' + fake_exe = 'bin/pypy3-c' if sys.platform == 'win32': - fake_exe = 'pypy-c.exe' + fake_exe = 'pypy3-c.exe' fake_exe = prefix.join(fake_exe).ensure(file=1) expected_path = [str(prefix.join(subdir).ensure(dir=1)) for subdir in ('lib_pypy', @@ -1119,11 +1119,11 @@ if self.tmp_dir.startswith(self.trunkdir): skip('TMPDIR is inside the PyPy source') sys.path.append(self.goal_dir) - tmp_pypy_c = os.path.join(self.tmp_dir, 'pypy-c') + tmp_pypy_c = os.path.join(self.tmp_dir, 'pypy3-c') try: os.chdir(self.tmp_dir) - # If we are running PyPy with a libpypy-c, the following + # If we are running PyPy with a libpypy3-c, the following # lines find the stdlib anyway. Otherwise, it is not found. expected_found = ( getattr(sys, 'pypy_translation_info', {}) @@ -1164,7 +1164,7 @@ sys.path.append(self.goal_dir) try: import app_main - pypy_c = os.path.join(self.trunkdir, 'pypy', 'goal', 'pypy-c') + pypy_c = os.path.join(self.trunkdir, 'pypy', 'goal', 'pypy3-c') app_main.setup_bootstrap_path(pypy_c) newpath = sys.path[:] # we get at least lib_pypy @@ -1182,7 +1182,7 @@ sys.path.append(self.goal_dir) try: import app_main - pypy_c = os.path.join(self.trunkdir, 'pypy', 'goal', 'pypy-c') + pypy_c = os.path.join(self.trunkdir, 'pypy', 'goal', 'pypy3-c') app_main.entry_point(pypy_c, [self.foo_py]) # assert it did not crash finally: diff --git a/pypy/interpreter/test/test_targetpypy.py b/pypy/interpreter/test/test_targetpypy.py --- a/pypy/interpreter/test/test_targetpypy.py +++ b/pypy/interpreter/test/test_targetpypy.py @@ -6,7 +6,7 @@ def test_run(self): config = get_pypy_config(translating=False) entry_point = get_entry_point(config)[0] - entry_point(['pypy-c' , '-S', '-c', 'print 3']) + entry_point(['pypy3-c' , '-S', '-c', 'print 3']) def test_execute_source(space): _, d = create_entry_point(space, None) diff --git a/pypy/module/_cffi_backend/embedding.py b/pypy/module/_cffi_backend/embedding.py --- a/pypy/module/_cffi_backend/embedding.py +++ b/pypy/module/_cffi_backend/embedding.py @@ -67,7 +67,7 @@ with_traceback=True) space.appexec([], r"""(): import sys - sys.stderr.write('pypy version: %s.%s.%s\n' % + sys.stderr.write('pypy3 version: %s.%s.%s\n' % sys.pypy_version_info[:3]) sys.stderr.write('sys.path: %r\n' % (sys.path,)) """) diff --git a/pypy/module/cpyext/state.py b/pypy/module/cpyext/state.py --- a/pypy/module/cpyext/state.py +++ b/pypy/module/cpyext/state.py @@ -126,7 +126,7 @@ argv0 = space.getitem(argv, space.newint(0)) progname = space.unicode_w(argv0) else: - progname = u"pypy" + progname = u"pypy3" self.programname = rffi.unicode2wcharp(progname) lltype.render_immortal(self.programname) return self.programname diff --git a/pypy/module/pypyjit/test_pypy_c/conftest.py b/pypy/module/pypyjit/test_pypy_c/conftest.py --- a/pypy/module/pypyjit/test_pypy_c/conftest.py +++ b/pypy/module/pypyjit/test_pypy_c/conftest.py @@ -1,4 +1,4 @@ def pytest_addoption(parser): group = parser.getgroup("pypyjit options") group.addoption("--pypy", action="store", default=None, dest="pypy_c", - help="the location of the JIT enabled pypy-c") + help="the location of the JIT enabled pypy3-c") diff --git a/pypy/module/sys/initpath.py b/pypy/module/sys/initpath.py --- a/pypy/module/sys/initpath.py +++ b/pypy/module/sys/initpath.py @@ -116,7 +116,7 @@ in the parent directory of 'executable', and search from the 'home' entry instead of from the path to 'executable'. """ - search = 'pypy-c' if executable == '' else executable + search = 'pypy3-c' if executable == '' else executable search_pyvenv_cfg = 2 while True: dirname = resolvedirof(search) diff --git a/pypy/module/sys/test/test_initpath.py b/pypy/module/sys/test/test_initpath.py --- a/pypy/module/sys/test/test_initpath.py +++ b/pypy/module/sys/test/test_initpath.py @@ -15,7 +15,7 @@ def test_find_stdlib(tmpdir): bin_dir = tmpdir.join('bin').ensure(dir=True) - pypy = bin_dir.join('pypy').ensure(file=True) + pypy = bin_dir.join('pypy3').ensure(file=True) build_hierarchy(tmpdir) path, prefix = find_stdlib(None, str(pypy)) assert prefix == tmpdir @@ -28,10 +28,10 @@ @py.test.mark.skipif('not hasattr(os, "symlink")') def test_find_stdlib_follow_symlink(tmpdir): - pypydir = tmpdir.join('opt', 'pypy-xxx') - pypy = pypydir.join('bin', 'pypy').ensure(file=True) + pypydir = tmpdir.join('opt', 'pypy3-xxx') + pypy = pypydir.join('bin', 'pypy3').ensure(file=True) build_hierarchy(pypydir) - pypy_sym = tmpdir.join('pypy_sym') + pypy_sym = tmpdir.join('pypy3_sym') os.symlink(str(pypy), str(pypy_sym)) path, prefix = find_stdlib(None, str(pypy_sym)) assert prefix == pypydir @@ -59,51 +59,51 @@ def test_find_executable(tmpdir, monkeypatch): from pypy.module.sys import initpath tmpdir = py.path.local(os.path.realpath(str(tmpdir))) - # /tmp/a/pypy - # /tmp/b/pypy + # /tmp/a/pypy3 + # /tmp/b/pypy3 # /tmp/c a = tmpdir.join('a').ensure(dir=True) b = tmpdir.join('b').ensure(dir=True) c = tmpdir.join('c').ensure(dir=True) - a.join('pypy').ensure(file=True) - b.join('pypy').ensure(file=True) + a.join('pypy3').ensure(file=True) + b.join('pypy3').ensure(file=True) # monkeypatch.setattr(os, 'access', lambda x, y: True) # if there is already a slash, don't do anything monkeypatch.chdir(tmpdir) - assert find_executable('a/pypy') == a.join('pypy') + assert find_executable('a/pypy3') == a.join('pypy3') # # if path is None, try abspath (if the file exists) monkeypatch.setenv('PATH', None) monkeypatch.chdir(a) - assert find_executable('pypy') == a.join('pypy') - monkeypatch.chdir(tmpdir) # no pypy there - assert find_executable('pypy') == '' + assert find_executable('pypy3') == a.join('pypy3') + monkeypatch.chdir(tmpdir) # no pypy3 there + assert find_executable('pypy3') == '' # # find it in path monkeypatch.setenv('PATH', str(a)) - assert find_executable('pypy') == a.join('pypy') + assert find_executable('pypy3') == a.join('pypy3') # # find it in the first dir in path monkeypatch.setenv('PATH', '%s%s%s' % (b, os.pathsep, a)) - assert find_executable('pypy') == b.join('pypy') + assert find_executable('pypy3') == b.join('pypy3') # # find it in the second, because in the first it's not there monkeypatch.setenv('PATH', '%s%s%s' % (c, os.pathsep, a)) - assert find_executable('pypy') == a.join('pypy') - # if pypy is found but it's not a file, ignore it - c.join('pypy').ensure(dir=True) - assert find_executable('pypy') == a.join('pypy') - # if pypy is found but it's not executable, ignore it + assert find_executable('pypy3') == a.join('pypy3') + # if pypy3 is found but it's not a file, ignore it + c.join('pypy3').ensure(dir=True) + assert find_executable('pypy3') == a.join('pypy3') + # if pypy3 is found but it's not executable, ignore it monkeypatch.setattr(os, 'access', lambda x, y: False) - assert find_executable('pypy') == '' + assert find_executable('pypy3') == '' # monkeypatch.setattr(os, 'access', lambda x, y: True) monkeypatch.setattr(initpath, 'we_are_translated', lambda: True) monkeypatch.setattr(initpath, '_WIN32', True) monkeypatch.setenv('PATH', str(a)) - a.join('pypy.exe').ensure(file=True) - assert find_executable('pypy') == a.join('pypy.exe') + a.join('pypy3.exe').ensure(file=True) + assert find_executable('pypy3') == a.join('pypy3.exe') def test_resolvedirof(tmpdir): assert resolvedirof('') == os.path.abspath(os.path.join(os.getcwd(), '..')) @@ -132,7 +132,7 @@ mydir = tmpdir.join('follow_pyvenv_cfg').ensure(dir=True) otherdir = tmpdir.join('otherdir').ensure(dir=True) bin_dir = mydir.join('bin').ensure(dir=True) - pypy = bin_dir.join('pypy').ensure(file=True) + pypy = bin_dir.join('pypy3').ensure(file=True) build_hierarchy(otherdir) for homedir in [otherdir, otherdir.join('bin')]: mydir.join('pyvenv.cfg').write('home = %s\n' % (homedir,)) diff --git a/pypy/sandbox/pypy_interact.py b/pypy/sandbox/pypy_interact.py --- a/pypy/sandbox/pypy_interact.py +++ b/pypy/sandbox/pypy_interact.py @@ -17,7 +17,7 @@ Note that you can get readline-like behavior with a tool like 'ledit', provided you use enough -u options: - ledit python -u pypy_interact.py pypy-c-sandbox -u + ledit python -u pypy_interact.py pypy3-c-sandbox -u """ import sys, os @@ -29,7 +29,7 @@ LIB_ROOT = os.path.dirname(os.path.dirname(pypy.__file__)) class PyPySandboxedProc(VirtualizedSandboxedProc, SimpleIOSandboxedProc): - argv0 = '/bin/pypy-c' + argv0 = '/bin/pypy3-c' virtual_cwd = '/tmp' virtual_env = {} virtual_console_isatty = True @@ -55,7 +55,7 @@ return Dir({ 'bin': Dir({ - 'pypy-c': RealFile(self.executable, mode=0111), + 'pypy3-c': RealFile(self.executable, mode=0111), 'lib-python': RealDir(os.path.join(libroot, 'lib-python'), exclude=exclude), 'lib_pypy': RealDir(os.path.join(libroot, 'lib_pypy'), @@ -126,4 +126,4 @@ sandproc.kill() if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/pypy/sandbox/test/test_pypy_interact.py b/pypy/sandbox/test/test_pypy_interact.py --- a/pypy/sandbox/test/test_pypy_interact.py +++ b/pypy/sandbox/test/test_pypy_interact.py @@ -26,9 +26,9 @@ assert_(argv[2] == 'bar', "bad argv[2]") env = os.environ.items() assert_(len(env) == 0, "empty environment expected") - assert_(argv[0] == '/bin/pypy-c', "bad argv[0]") - st = os.lstat('/bin/pypy-c') - assert_(stat.S_ISREG(st.st_mode), "bad st_mode for /bin/pypy-c") + assert_(argv[0] == '/bin/pypy3-c', "bad argv[0]") + st = os.lstat('/bin/pypy3-c') + assert_(stat.S_ISREG(st.st_mode), "bad st_mode for /bin/pypy3-c") for dirname in ['/bin/lib-python/' + VERSION, '/bin/lib_pypy']: st = os.stat(dirname) assert_(stat.S_ISDIR(st.st_mode), "bad st_mode for " + dirname) diff --git a/pypy/tool/pytest/objspace.py b/pypy/tool/pytest/objspace.py --- a/pypy/tool/pytest/objspace.py +++ b/pypy/tool/pytest/objspace.py @@ -69,7 +69,7 @@ if has != value: #print sys.pypy_translation_info py.test.skip("cannot runappdirect test: space needs %s = %s, "\ - "while pypy-c was built with %s" % (key, value, has)) + "while pypy3-c was built with %s" % (key, value, has)) for name in ('int', 'long', 'str', 'unicode', 'list', 'None', 'ValueError', 'OverflowError'): diff --git a/pypy/tool/release/package.py b/pypy/tool/release/package.py --- a/pypy/tool/release/package.py +++ b/pypy/tool/release/package.py @@ -1,6 +1,6 @@ #!/usr/bin/env python """ packages PyPy, provided that it's already built. -It uses 'pypy/goal/pypy-c' and parts of the rest of the working +It uses 'pypy/goal/pypy3-c' and parts of the rest of the working copy. Usage: package.py [--options] --archive-name=pypy-VER-PLATFORM @@ -25,8 +25,7 @@ STDLIB_VER = "3" -# XXX: don't hardcode the version -POSIX_EXE = 'pypy3.5' +POSIX_EXE = 'pypy3' from pypy.tool.build_cffi_imports import (create_cffi_import_libraries, MissingDependenciesError, cffi_build_scripts) @@ -69,7 +68,7 @@ basedir = py.path.local(basedir) if not override_pypy_c: - basename = 'pypy-c' + basename = 'pypy3-c' if sys.platform == 'win32': basename += '.exe' pypy_c = basedir.join('pypy', 'goal', basename) @@ -99,10 +98,10 @@ if (sys.platform != 'win32' and # handled below not _fake and os.path.getsize(str(pypy_c)) < 500000): - # This pypy-c is very small, so it means it relies on libpypy_c.so. + # This pypy3-c is very small, so it means it relies on libpypy3_c.so. # If it would be bigger, it wouldn't. That's a hack. - libpypy_name = ('libpypy-c.so' if not sys.platform.startswith('darwin') - else 'libpypy-c.dylib') + libpypy_name = ('libpypy3-c.so' if not sys.platform.startswith('darwin') + else 'libpypy3-c.dylib') libpypy_c = pypy_c.new(basename=libpypy_name) if not libpypy_c.check(): raise PyPyCNotFound('Expected pypy to be mostly in %r, but did ' @@ -123,8 +122,8 @@ tgt = py.path.local(tgt) binaries.append((pypyw, tgt.new(purebasename=tgt.purebasename + 'w').basename)) print "Picking %s" % str(pypyw) - # Can't rename a DLL: it is always called 'libpypy-c.dll' - win_extras = ['libpypy-c.dll', 'sqlite3.dll'] + # Can't rename a DLL: it is always called 'libpypy3-c.dll' + win_extras = ['libpypy3-c.dll', 'sqlite3.dll'] if not options.no_tk: win_extras += ['tcl85.dll', 'tk85.dll'] @@ -144,7 +143,7 @@ else: print '"libs" dir with import library not found.' print 'You have to create %r' % (str(libsdir),) - print 'and copy libpypy-c.lib in there, renamed to python32.lib' + print 'and copy libpypy3-c.lib in there, renamed to python32.lib' # XXX users will complain that they cannot compile capi (cpyext) # modules for windows, also embedding pypy (i.e. in cffi) # will fail. @@ -207,14 +206,14 @@ else: open(str(archive), 'wb').close() os.chmod(str(archive), 0755) - if not _fake and not sys.platform == 'win32': - # create the pypy3 symlink - old_dir = os.getcwd() - os.chdir(str(bindir)) - try: - os.symlink(POSIX_EXE, 'pypy3') - finally: - os.chdir(old_dir) + #if not _fake and not sys.platform == 'win32': + # # create the pypy3 symlink + # old_dir = os.getcwd() + # os.chdir(str(bindir)) + # try: + # os.symlink(POSIX_EXE, 'pypy3') + # finally: + # os.chdir(old_dir) fix_permissions(pypydir) old_dir = os.getcwd() @@ -266,7 +265,7 @@ def package(*args, **kwds): import argparse if sys.platform == 'win32': - pypy_exe = 'pypy.exe' + pypy_exe = 'pypy3.exe' else: pypy_exe = POSIX_EXE parser = argparse.ArgumentParser() @@ -286,7 +285,7 @@ parser.add_argument('--nostrip', dest='nostrip', action='store_true', help='do not strip the exe, making it ~10MB larger') parser.add_argument('--rename_pypy_c', dest='pypy_c', type=str, default=pypy_exe, - help='target executable name, defaults to "pypy"') + help='target executable name, defaults to "%s"' % pypy_exe) parser.add_argument('--archive-name', dest='name', type=str, default='', help='pypy-VER-PLATFORM') parser.add_argument('--builddir', type=str, default='', @@ -294,7 +293,7 @@ parser.add_argument('--targetdir', type=str, default='', help='destination dir for archive') parser.add_argument('--override_pypy_c', type=str, default='', - help='use as pypy exe instead of pypy/goal/pypy-c') + help='use as pypy3 exe instead of pypy/goal/pypy3-c') options = parser.parse_args(args) if os.environ.has_key("PYPY_PACKAGE_NOSTRIP"): diff --git a/pypy/tool/release/test/test_package.py b/pypy/tool/release/test/test_package.py --- a/pypy/tool/release/test/test_package.py +++ b/pypy/tool/release/test/test_package.py @@ -8,13 +8,13 @@ class TestPackaging: def setup_class(cls): - # make sure we have sort of pypy-c + # make sure we have sort of pypy3-c if sys.platform == 'win32': - basename = 'pypy-c.exe' - cls.rename_pypy_c = 'pypy-c' - cls.exe_name_in_archive = 'pypy-c.exe' + basename = 'pypy3-c.exe' + cls.rename_pypy_c = 'pypy3-c' + cls.exe_name_in_archive = 'pypy3-c.exe' else: - basename = 'pypy-c' + basename = 'pypy3-c' cls.rename_pypy_c = package.POSIX_EXE cls.exe_name_in_archive = os.path.join('bin', package.POSIX_EXE) cls.pypy_c = py.path.local(pypydir).join('goal', basename) @@ -96,7 +96,7 @@ bin = tmpdir.join('bin') .ensure(dir=True) file1 = tmpdir.join('file1').ensure(file=True) file2 = mydir .join('file2').ensure(file=True) - pypy = bin .join('pypy') .ensure(file=True) + pypy = bin .join('pypy3').ensure(file=True) # mydir.chmod(0700) bin.chmod(0700) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit