33 if mainfrozen() and getattr(sys, 'frozen', None) != 'macosx_app': |
33 if mainfrozen() and getattr(sys, 'frozen', None) != 'macosx_app': |
34 # executable version (py2exe) doesn't support __file__ |
34 # executable version (py2exe) doesn't support __file__ |
35 datapath = os.path.dirname(pycompat.sysexecutable) |
35 datapath = os.path.dirname(pycompat.sysexecutable) |
36 else: |
36 else: |
37 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) |
37 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) |
|
38 _rootpath = os.path.dirname(datapath) |
38 |
39 |
39 try: |
40 try: |
40 from importlib import resources |
41 from importlib import resources |
41 |
42 |
42 # Force loading of the resources module |
43 # Force loading of the resources module |
43 resources.open_binary # pytype: disable=module-attr |
44 resources.open_binary # pytype: disable=module-attr |
44 |
45 |
45 def open_resource(package, name): |
46 def open_resource(package, name): |
46 package = b'mercurial.' + package |
|
47 return resources.open_binary( # pytype: disable=module-attr |
47 return resources.open_binary( # pytype: disable=module-attr |
48 pycompat.sysstr(package), pycompat.sysstr(name) |
48 pycompat.sysstr(package), pycompat.sysstr(name) |
49 ) |
49 ) |
50 |
50 |
51 |
51 |
52 except (ImportError, AttributeError): |
52 except (ImportError, AttributeError): |
53 |
53 |
54 def _package_path(package): |
54 def _package_path(package): |
55 return os.path.join(datapath, *package.split(b'.')) |
55 return os.path.join(_rootpath, *package.split(b'.')) |
56 |
56 |
57 def open_resource(package, name): |
57 def open_resource(package, name): |
58 path = os.path.join(_package_path(package), name) |
58 path = os.path.join(_package_path(package), name) |
59 return open(path, 'rb') |
59 return open(path, 'rb') |