##// END OF EJS Templates
demandimport: eagerly load msvcrt module on PyPy
Manuel Jacob -
r50167:fda7ec50 stable
parent child Browse files
Show More
@@ -1,84 +1,87 b''
1 1 # hgdemandimport - global demand-loading of modules for Mercurial
2 2 #
3 3 # Copyright 2017 Facebook Inc.
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 '''demandimport - automatic demand-loading of modules'''
9 9
10 10 # This is in a separate package from mercurial because in Python 3,
11 11 # demand loading is per-package. Keeping demandimport in the mercurial package
12 12 # would disable demand loading for any modules in mercurial.
13 13
14 14 from __future__ import absolute_import
15 15
16 16 import os
17 17 import sys
18 18
19 19 if sys.version_info[0] >= 3:
20 20 from . import demandimportpy3 as demandimport
21 21 else:
22 22 from . import demandimportpy2 as demandimport
23 23
24 24 # Full module names which can't be lazy imported.
25 25 # Extensions can add to this set.
26 26 IGNORES = {
27 27 '__future__',
28 28 '_hashlib',
29 29 # ImportError during pkg_resources/__init__.py:fixup_namespace_package
30 30 '_imp',
31 31 '_xmlplus',
32 32 'fcntl',
33 33 'nt', # pathlib2 tests the existence of built-in 'nt' module
34 34 'win32com.gen_py',
35 35 'win32com.shell', # 'appdirs' tries to import win32com.shell
36 36 '_winreg', # 2.7 mimetypes needs immediate ImportError
37 37 'pythoncom',
38 38 # imported by tarfile, not available under Windows
39 39 'pwd',
40 40 'grp',
41 41 # imported by profile, itself imported by hotshot.stats,
42 42 # not available under Windows
43 43 'resource',
44 44 # this trips up many extension authors
45 45 'gtk',
46 46 # setuptools' pkg_resources.py expects "from __main__ import x" to
47 47 # raise ImportError if x not defined
48 48 '__main__',
49 49 '_ast', # https://bugs.python.org/issue41631
50 50 '_ssl', # conditional imports in the stdlib, issue1964
51 51 '_sre', # issue4920
52 52 'rfc822',
53 53 'mimetools',
54 54 'sqlalchemy.events', # has import-time side effects (issue5085)
55 55 'sqlalchemy.dialects', # similar problems as above
56 56 # setuptools 8 expects this module to explode early when not on windows
57 57 'distutils.msvc9compiler',
58 58 '__builtin__',
59 59 'builtins',
60 60 'urwid.command_map', # for pudb
61 61 'lzma',
62 62 }
63 63
64 64 _pypy = '__pypy__' in sys.builtin_module_names
65 65
66 66 if _pypy:
67 67 # _ctypes.pointer is shadowed by "from ... import pointer" (PyPy 5)
68 68 IGNORES.add('_ctypes.pointer')
69 # pure Python module on PyPy, must be loaded to raise ModuleNotFoundError
70 # on non-Windows platforms
71 IGNORES.add('msvcrt')
69 72
70 73 demandimport.init(IGNORES)
71 74
72 75 # Re-export.
73 76 isenabled = demandimport.isenabled
74 77 disable = demandimport.disable
75 78 deactivated = demandimport.deactivated
76 79
77 80
78 81 def enable():
79 82 # chg pre-imports modules so do not enable demandimport for it
80 83 if (
81 84 'CHGINTERNALMARK' not in os.environ
82 85 and os.environ.get('HGDEMANDIMPORT') != 'disable'
83 86 ):
84 87 demandimport.enable()
General Comments 0
You need to be logged in to leave comments. Login now