Author: Philip Jenvey <pjen...@underboss.org> Branch: py3k Changeset: r70502:b7063430977e Date: 2014-04-09 11:32 -0700 http://bitbucket.org/pypy/pypy/changeset/b7063430977e/
Log: merge default diff --git a/pypy/doc/faq.rst b/pypy/doc/faq.rst --- a/pypy/doc/faq.rst +++ b/pypy/doc/faq.rst @@ -459,6 +459,19 @@ .. _`getting-started`: getting-started-python.html +------------------------------------------ +Compiling PyPy swaps or runs out of memory +------------------------------------------ + +This is documented (here__ and here__). It needs 4 GB of RAM to run +"rpython targetpypystandalone" on top of PyPy, a bit more when running +on CPython. If you have less than 4 GB it will just swap forever (or +fail if you don't have enough swap). On 32-bit, divide the numbers by +two. + +.. __: http://pypy.org/download.html#building-from-source +.. __: https://pypy.readthedocs.org/en/latest/getting-started-python.html#translating-the-pypy-python-interpreter + .. _`how do I compile my own interpreters`: ------------------------------------- diff --git a/pypy/doc/stm.rst b/pypy/doc/stm.rst --- a/pypy/doc/stm.rst +++ b/pypy/doc/stm.rst @@ -15,11 +15,11 @@ user, describes work in progress, and finally gives references to more implementation details. -This work was done by Remi Meier and Armin Rigo. Thanks to all donors -for crowd-funding the work so far! Please have a look at the 2nd call -for donation (*not ready yet*) +This work was done mostly by Remi Meier and Armin Rigo. Thanks to all +donors for crowd-funding the work so far! Please have a look at the +`2nd call for donation`_. -.. .. _`2nd call for donation`: http://pypy.org/tmdonate2.html +.. _`2nd call for donation`: http://pypy.org/tmdonate2.html Introduction 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 @@ -2,27 +2,31 @@ Logic to find sys.executable and the initial sys.path containing the stdlib """ -import sys +import errno import os import stat -import errno +import sys + from rpython.rlib import rpath from rpython.rlib.objectmodel import we_are_translated + from pypy.interpreter.gateway import unwrap_spec from pypy.module.sys.state import get as get_state -platform = sys.platform IS_WINDOWS = sys.platform == 'win32' + def find_executable(executable): """ - Return the absolute path of the executable, by looking into PATH and the - current directory. If it cannot be found, return ''. + Return the absolute path of the executable, by looking into PATH and + the current directory. If it cannot be found, return ''. """ - if we_are_translated() and IS_WINDOWS and not executable.lower().endswith('.exe'): + if (we_are_translated() and IS_WINDOWS and + not executable.lower().endswith('.exe')): executable += '.exe' if os.sep in executable or (IS_WINDOWS and ':' in executable): - pass # the path is already more than just an executable name + # the path is already more than just an executable name + pass else: path = os.environ.get('PATH') if path: @@ -35,15 +39,15 @@ # 'sys.executable' should not end up being an non-existing file; # just use '' in this case. (CPython issue #7774) - if not os.path.isfile(executable): - executable = '' - return executable + return executable if os.path.isfile(executable) else '' + def _readlink_maybe(filename): if not IS_WINDOWS: return os.readlink(filename) raise NotImplementedError + def resolvedirof(filename): filename = rpath.rabspath(filename) dirname = rpath.rabspath(os.path.join(filename, '..')) @@ -56,36 +60,37 @@ return resolvedirof(os.path.join(dirname, link)) return dirname + def find_stdlib(state, executable): """ Find and compute the stdlib path, starting from the directory where - ``executable`` is and going one level up until we find it. Return a tuple - (path, prefix), where ``prefix`` is the root directory which contains the - stdlib. - If it cannot be found, return (None, None). + ``executable`` is and going one level up until we find it. Return a + tuple (path, prefix), where ``prefix`` is the root directory which + contains the stdlib. If it cannot be found, return (None, None). """ - if executable == '': - executable = 'pypy-c' - search = executable + search = 'pypy-c' if executable == '' else executable while True: dirname = resolvedirof(search) if dirname == search: - return None, None # not found :-( + return None, None # not found :-( newpath = compute_stdlib_path_maybe(state, dirname) if newpath is not None: return newpath, dirname search = dirname # walk to the parent directory + def _checkdir(path): st = os.stat(path) if not stat.S_ISDIR(st[0]): raise OSError(errno.ENOTDIR, path) + def compute_stdlib_path(state, prefix): """ - Compute the paths for the stdlib rooted at ``prefix``. ``prefix`` must at - least contain a directory called ``lib-python/X.Y`` and another one called - ``lib_pypy``. If they cannot be found, it raises OSError. + Compute the paths for the stdlib rooted at ``prefix``. ``prefix`` + must at least contain a directory called ``lib-python/X.Y`` and + another one called ``lib_pypy``. If they cannot be found, it raises + OSError. """ from pypy.module.sys.version import CPYTHON_VERSION dirname = '%d' % CPYTHON_VERSION[0] @@ -110,41 +115,42 @@ importlist.append(lib_tk) # List here the extra platform-specific paths. - if platform != 'win32': - importlist.append(os.path.join(python_std_lib, 'plat-'+platform)) - if platform == 'darwin': + if not IS_WINDOWS: + importlist.append(os.path.join(python_std_lib, 'plat-' + sys.platform)) + if sys.platform == 'darwin': platmac = os.path.join(python_std_lib, 'plat-mac') importlist.append(platmac) importlist.append(os.path.join(platmac, 'lib-scriptpackages')) return importlist + def compute_stdlib_path_maybe(state, prefix): - """ - Return the stdlib path rooted at ``prefix``, or None if it cannot be - found. + """Return the stdlib path rooted at ``prefix``, or None if it cannot + be found. """ try: return compute_stdlib_path(state, prefix) except OSError: return None + @unwrap_spec(executable='str0') def pypy_find_executable(space, executable): return space.wrap(find_executable(executable)) + @unwrap_spec(filename='str0') def pypy_resolvedirof(space, filename): return space.wrap(resolvedirof(filename)) + @unwrap_spec(executable='str0') def pypy_find_stdlib(space, executable): path, prefix = find_stdlib(get_state(space), executable) if path is None: return space.w_None - else: - space.setitem(space.sys.w_dict, space.wrap('prefix'), - space.wrap(prefix)) - space.setitem(space.sys.w_dict, space.wrap('exec_prefix'), - space.wrap(prefix)) - return space.newlist([space.wrap(p) for p in path]) + space.setitem(space.sys.w_dict, space.wrap('prefix'), space.wrap(prefix)) + space.setitem(space.sys.w_dict, space.wrap('exec_prefix'), + space.wrap(prefix)) + return space.newlist([space.wrap(p) for p in path]) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit