Skip to content

Commit

Permalink
Merge pull request spyder-ide#23141 from mrclary/spyder-base
Browse files Browse the repository at this point in the history
PR: Update `setup.py` to accommodate the Conda-forge package split (Installation)
  • Loading branch information
ccordoba12 authored Dec 13, 2024
2 parents 4fc8149 + cfee23e commit 80f6954
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 32 deletions.
25 changes: 21 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,8 +244,20 @@ def run(self):

# Qt bindings requirements
qt_requirements = {
'pyqt5': ['pyqt5>=5.15,<5.16', 'pyqtwebengine>=5.15,<5.16', 'pyqt5-sip<12.16; python_version=="3.8"'],
'pyqt6': ['pyqt6>=6.5,<7', 'pyqt6-webengine>=6.5,<7'],
'pyqt5': [
'pyqt5>=5.15,<5.16',
'pyqt5-sip<12.16; python_version=="3.8"',
'pyqtwebengine>=5.15,<5.16',
'qtconsole>=5.6.1,<5.7.0',
],
'pyqt6': [
'pyqt6>=6.5,<7',
'pyqt6-webengine>=6.5,<7',
'qtconsole>=5.6.1,<5.7.0',
],
'conda-forge': [
'qtconsole>=5.6.1,<5.7.0',
]
}

# Get the proper requirements for the selected Qt binding
Expand Down Expand Up @@ -289,7 +301,6 @@ def run(self):
'qdarkstyle>=3.2.0,<3.3.0',
'qstylizer>=0.2.2',
'qtawesome>=1.3.1,<1.4.0',
'qtconsole>=5.6.1,<5.7.0',
'qtpy>=2.4.0',
'rtree>=0.9.7',
'setuptools>=49.6.0',
Expand All @@ -304,9 +315,15 @@ def run(self):

# Loosen constraints to ensure dev versions still work
if 'dev' in __version__:
reqs_to_loosen = {'python-lsp-server[all]', 'qtconsole', 'spyder-kernels'}
reqs_to_loosen = {
'python-lsp-server[all]',
'qtconsole',
'qtconsole-base',
'spyder-kernels',
}
install_requires = [req for req in install_requires
if req.split(">")[0] not in reqs_to_loosen]

install_requires.append('python-lsp-server[all]>=1.12.0,<1.14.0')
install_requires.append('qtconsole>=5.5.1,<5.7.0')

Expand Down
52 changes: 24 additions & 28 deletions spyder/tests/test_dependencies_in_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,45 +80,41 @@ def parse_setup_install_requires(fpath):
"""
Parse Spyder setup.py and return a dict of deps and versions.
"""
deps = {}
with open(fpath, 'r') as fh:
data = fh.read()

# Extract dependencies
lines = data.split('\n')
start = None
end = None
for idx, line in enumerate(lines):
if "'pyqt5': " in line:
idx_qt = idx

if line.startswith('install_requires += '):
start = idx + 1

if start is not None and line.startswith(']'):
end = idx
break

qt_deps = lines[idx_qt].split("'pyqt5': ")[1]
qt_deps = literal_eval(qt_deps[:qt_deps.index("]") + 1])
dep_list = literal_eval('[' + '\n'.join(lines[start:end + 1]))
dep_list = [item for item in dep_list if item[0] != '#']

for dep in dep_list + qt_deps:
is_dep_line = False
deps_list = []
for line in lines:
if is_dep_line:
if line.strip() in ('],', ']'):
# End of dependency lines
is_dep_line = False
elif not line.strip().startswith('#'):
# Add dependency
deps_list.append(line.strip().strip(',').strip("'"))
if (
line.strip() in ("'pyqt5': [", "install_requires += [")
and not is_dep_line
):
# Depencies begin on next line
is_dep_line = True

# Process dependencies
deps = {}
for dep in deps_list:
dep = dep.split(';')[0]
name, ver = None, None

for sep in ['>=', '==', '<=', '<', '>']:
if sep in dep:
idx = dep.index(sep)
name = dep[:idx]
ver = dep[idx:]
name, ver = dep.split(sep)
name = name.split('[')[0] # Discard e.g. [all]
ver = sep + ver # Include comparator
break

if name is not None:
name = name.split('[')[0]
else:
name = dep.split('[')[0]

# Transform pypi to conda name
if name == 'pyqt5':
name = 'pyqt'
Expand Down

0 comments on commit 80f6954

Please sign in to comment.