Skip to content

Commit 67a80c3

Browse files
committed
Add support for python 3.13 plugin host
Assuming folder structure keeps unchanged, this commit adds support for another plugin_host. Supported python environment is dynamically evaluated using available library paths.
1 parent 4a643c2 commit 67a80c3

File tree

4 files changed

+53
-17
lines changed

4 files changed

+53
-17
lines changed

package_control/distinfo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def generate_wheel(python_version, plat_specific):
157157
specific to a platform and optionally architecture
158158
"""
159159

160-
if python_version is not None and python_version not in {"3.3", "3.8"}:
160+
if python_version is not None and python_version not in sys_path.python_versions():
161161
raise ValueError("Invalid python_version %s" % repr(python_version))
162162

163163
version_tag = "py3"
@@ -171,7 +171,7 @@ def generate_wheel(python_version, plat_specific):
171171
arch = os.uname()[4]
172172
if python_version == "3.3":
173173
arch_tag = "macosx_10_7_%s" % arch
174-
elif python_version == "3.8":
174+
else:
175175
arch_tag = "macosx_10_9_%s" % arch
176176
elif sys.platform == "linux":
177177
arch_tag = "linux_%s" % os.uname()[4]

package_control/library.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
from . import distinfo
99
from .clear_directory import delete_directory
1010

11-
BUILTIN_LIBRARIES = {"3.3": {}, "3.8": {"enum", "pathlib", "typing"}}
11+
BUILTIN_LIBRARIES = {
12+
"3.3": {},
13+
"3.8": {"enum", "pathlib", "typing"},
14+
"3.13": {"enum", "exceptiongroup", "pathlib", "typing"},
15+
}
1216
"""3rd-party libraries, which are part of stdlib as of certain python version"""
1317

1418
DEPENDENCY_NAME_MAP = {

package_control/package_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,8 @@ def get_python_version(self, package_name):
262262
A unicode string of "3.3" or "3.8"
263263
"""
264264

265-
if self.settings["disable_plugin_host_3.3"]:
266-
return "3.8"
265+
if self.settings['version'] > 4200 or self.settings["disable_plugin_host_3.3"]:
266+
return sys_path.python_version()
267267

268268
python_version = read_package_file(package_name, ".python-version")
269269
if python_version:

package_control/sys_path.py

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,29 @@ def add_dependency(name, first=False):
9191
pass
9292

9393

94+
def python_version():
95+
"""
96+
Return version of current python environment.
97+
98+
returns
99+
A string like "3.3", "3.8" or "3.13"
100+
"""
101+
try:
102+
return python_version.cache
103+
except AttributeError:
104+
python_version.cache = "{0}.{1}".format(*sys.version_info[:2])
105+
return python_version.cache
106+
107+
108+
def python_versions():
109+
"""
110+
Return a list of supported python environments.
111+
returns
112+
A tuple of e.g. ("3.3", "3.8")
113+
"""
114+
return tuple(lib_paths())
115+
116+
94117
def cache_path():
95118
"""
96119
Returns the ST cache directory
@@ -130,12 +153,20 @@ def lib_paths():
130153
try:
131154
return lib_paths.cache
132155
except AttributeError:
133-
lib_paths.cache = {
134-
"3.3": os.path.join(__data_path, "Lib", "python33"),
135-
"3.8": os.path.join(__data_path, "Lib", "python38")
136-
} if int(sublime.version()) >= 4000 else {
137-
"3.3": os.path.join(__data_path, "Lib", "python3.3")
138-
}
156+
st_version = int(sublime.version())
157+
if st_version > 4200:
158+
lib_paths.cache = {
159+
"3.13": os.path.join(__data_path, "Lib", "python313"),
160+
}
161+
elif st_version >= 4000:
162+
lib_paths.cache = {
163+
"3.3": os.path.join(__data_path, "Lib", "python33"),
164+
"3.8": os.path.join(__data_path, "Lib", "python38")
165+
}
166+
else:
167+
lib_paths.cache = {
168+
"3.3": os.path.join(__data_path, "Lib", "python3.3")
169+
}
139170
return lib_paths.cache
140171

141172

@@ -193,11 +224,12 @@ def python_libs_cache_path(python_version):
193224

194225
global __python_libs_cache_path
195226

196-
if not __python_libs_cache_path:
227+
if __python_libs_cache_path is None:
197228
__python_libs_cache_path = {
198-
"3.3": None, # bytecode cache not supported
199-
"3.8": os.path.join(
200-
cache_path(), '__pycache__', 'install', 'Data', 'Lib', "python38")
229+
py: None if py == "3.3" else os.path.join(
230+
cache_path(), '__pycache__', 'install', 'Data', 'Lib', os.path.basename(lib)
231+
)
232+
for py, lib in lib_paths().items()
201233
}
202234

203235
return str(__python_libs_cache_path[python_version])
@@ -213,7 +245,7 @@ def python_packages_cache_path():
213245

214246
global __python_packages_cache_path
215247

216-
if not __python_packages_cache_path:
248+
if __python_packages_cache_path is None:
217249
__python_packages_cache_path = os.path.join(
218250
cache_path(), '__pycache__', 'install', 'Data', 'Packages')
219251

@@ -230,7 +262,7 @@ def pc_cache_dir():
230262

231263
global __package_control_cache_path
232264

233-
if not __package_control_cache_path:
265+
if __package_control_cache_path is None:
234266
__package_control_cache_path = os.path.join(cache_path(), 'Package Control')
235267

236268
return str(__package_control_cache_path)

0 commit comments

Comments
 (0)