unbreak and install spyder

This commit is contained in:
Sebastien Bourdeauducq 2022-05-05 19:12:39 +08:00
parent de8b81bd1f
commit c8c0619b16
20 changed files with 982 additions and 2 deletions

View File

@ -46,7 +46,15 @@
imagemagick imagemagick
firefox firefox
chromium chromium
(python3.withPackages(ps: with ps; [ numpy scipy matplotlib jupyter pyserial artiq.packages.x86_64-linux.artiq ])) (python3.withPackages(ps: with ps; [
numpy
scipy
matplotlib
jupyter
pyserial
spyder
artiq.packages.x86_64-linux.artiq
]))
artiq.packages.x86_64-linux.openocd-bscanspi artiq.packages.x86_64-linux.openocd-bscanspi
texlive.combined.scheme-full texlive.combined.scheme-full
psmisc psmisc

View File

@ -4,7 +4,7 @@
nixosConfigurations.artiq = artiq.inputs.nixpkgs.lib.nixosSystem { nixosConfigurations.artiq = artiq.inputs.nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
specialArgs = { inherit artiq; }; specialArgs = { inherit artiq; };
modules = [ ./configuration.nix ]; modules = [ ./configuration.nix ./spyder ];
}; };
}; };
} }

View File

@ -0,0 +1,31 @@
{ lib, fetchPypi, buildPythonPackage, pycodestyle, glibcLocales
, toml
}:
buildPythonPackage rec {
pname = "autopep8";
version = "1.6.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-RPCTKFUDnSwVxFENbfZl5HMPK4WCcE+kj5xVvT4X2Xk=";
};
propagatedBuildInputs = [ pycodestyle toml ];
# One test fails:
# FAIL: test_recursive_should_not_crash_on_unicode_filename (test.test_autopep8.CommandLineTests)
# doCheck = false;
checkInputs = [ glibcLocales ];
LC_ALL = "en_US.UTF-8";
meta = with lib; {
description = "A tool that automatically formats Python code to conform to the PEP 8 style guide";
homepage = "https://pypi.python.org/pypi/autopep8/";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ bjornfor ];
};
}

View File

@ -0,0 +1,85 @@
{ stdenv, lib
, buildPythonPackage, fetchPypi, pythonOlder, setuptools-scm, pytestCheckHook
, aiohttp
, aiohttp-cors
, attrs
, click
, colorama
, dataclasses
, mypy-extensions
, pathspec
, parameterized
, platformdirs
, regex
, tomli
, typed-ast
, typing-extensions
, uvloop
}:
buildPythonPackage rec {
pname = "black";
version = "22.3.0";
disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-NQILiIbAIs7ZKCtRtah1ttGrDDh7MaBluE23wzCFynk=";
};
nativeBuildInputs = [ setuptools-scm ];
# Necessary for the tests to pass on Darwin with sandbox enabled.
# Black starts a local server and needs to bind a local address.
__darwinAllowLocalNetworking = true;
checkInputs = [ pytestCheckHook parameterized ];
preCheck = ''
export PATH="$PATH:$out/bin"
# The top directory /build matches black's DEFAULT_EXCLUDE regex.
# Make /build the project root for black tests to avoid excluding files.
touch ../.git
'' + lib.optionalString stdenv.isDarwin ''
# Work around https://github.com/psf/black/issues/2105
export TMPDIR="/tmp"
'';
disabledTests = [
# requires network access
"test_gen_check_output"
] ++ lib.optionals stdenv.isDarwin [
# fails on darwin
"test_expression_diff"
# Fail on Hydra, see https://github.com/NixOS/nixpkgs/pull/130785
"test_bpo_2142_workaround"
"test_skip_magic_trailing_comma"
];
propagatedBuildInputs = [
aiohttp
aiohttp-cors
attrs
click
colorama
mypy-extensions
pathspec
platformdirs
regex
tomli
typed-ast # required for tests and python2 extra
uvloop
] ++ lib.optional (pythonOlder "3.7") dataclasses
++ lib.optional (pythonOlder "3.8") typing-extensions;
meta = with lib; {
description = "The uncompromising Python code formatter";
homepage = "https://github.com/psf/black";
changelog = "https://github.com/psf/black/blob/${version}/CHANGES.md";
license = licenses.mit;
maintainers = with maintainers; [ sveitser autophagy ];
};
}

23
final/spyder/default.nix Normal file
View File

@ -0,0 +1,23 @@
{ config, pkgs, ... }:
{
# https://github.com/NixOS/nixpkgs/issues/171613
nixpkgs.overlays = [ (self: super: rec {
python3 = super.python3.override {
packageOverrides = pyself: pysuper: {
autopep8 = pysuper.pkgs.python3Packages.callPackage ./autopep8 {};
black = pysuper.pkgs.python3Packages.callPackage ./black {};
ipykernel = pysuper.pkgs.python3Packages.callPackage ./ipykernel {};
ipython = pysuper.pkgs.python3Packages.callPackage ./ipython {};
jupyter-client = pysuper.pkgs.python3Packages.callPackage ./jupyter-client {};
python-lsp-black = pysuper.pkgs.python3Packages.callPackage ./python-lsp-black {};
python-lsp-server = pysuper.pkgs.python3Packages.callPackage ./python-lsp-server {};
qdarkstyle = pysuper.pkgs.python3Packages.callPackage ./qdarkstyle {};
qtconsole = pysuper.pkgs.python3Packages.callPackage ./qtconsole {};
qtpy = pysuper.pkgs.python3Packages.callPackage ./qtpy {};
spyder-kernels = pysuper.pkgs.python3Packages.callPackage ./spyder-kernels {};
spyder = pysuper.pkgs.python3Packages.callPackage ./spyder {};
};
};
python3Packages = python3.pkgs;
}) ];
}

View File

@ -0,0 +1,41 @@
{ lib
, buildPythonPackage
, fetchPypi
, nose
, isPy27
, mock
, ipython
, jupyter-client
, pexpect
, traitlets
, tornado
}:
buildPythonPackage rec {
pname = "ipykernel";
version = "4.10.1";
src = fetchPypi {
inherit pname version;
sha256 = "eeb74b2bcfe0ced5a7900361f98fa1171288aa47ed4b522efe5acb167c6cf5fb";
};
checkInputs = [ nose ] ++ lib.optional isPy27 mock;
propagatedBuildInputs = [
ipython
jupyter-client
pexpect
traitlets
tornado
];
# Tests require backends.
# I don't want to add all supported backends as propagatedBuildInputs
doCheck = false;
meta = {
description = "IPython Kernel for Jupyter";
homepage = "http://ipython.org/";
license = lib.licenses.bsd3;
};
}

View File

@ -0,0 +1,50 @@
{ lib
, buildPythonPackage
, callPackage
, fetchPypi
, pythonOlder
, argcomplete
, debugpy
, ipython
, jupyter-client
, tornado
, traitlets
, psutil
, packaging
}:
buildPythonPackage rec {
pname = "ipykernel";
version = "6.13.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-DignPikIWDk+huFSsQTlUGp5wT0luVGsbsoiAFG0vmA=";
};
propagatedBuildInputs = [
debugpy
ipython
jupyter-client
tornado
traitlets
psutil
packaging
] ++ lib.optionals (pythonOlder "3.8") [
argcomplete
];
# check in passthru.tests.pytest to escape infinite recursion with ipyparallel
doCheck = false;
passthru.tests = {
pytest = callPackage ./tests.nix { };
};
meta = {
description = "IPython Kernel for Jupyter";
homepage = "http://ipython.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ fridh ];
};
}

View File

@ -0,0 +1,57 @@
{ lib
, stdenv
, buildPythonPackage
, pythonOlder
, flaky
, ipykernel
, ipyparallel
, nose
, pytestCheckHook
}:
buildPythonPackage rec {
pname = "ipykernel-tests";
inherit (ipykernel) version;
src = ipykernel.src;
dontBuild = true;
dontInstall = true;
checkInputs = [
flaky
ipykernel
ipyparallel
nose
pytestCheckHook
];
preCheck = ''
export HOME=$(mktemp -d)
'';
disabledTests = lib.optionals stdenv.isDarwin ([
# see https://github.com/NixOS/nixpkgs/issues/76197
"test_subprocess_print"
"test_subprocess_error"
"test_ipython_start_kernel_no_userns"
# https://github.com/ipython/ipykernel/issues/506
"test_unc_paths"
] ++ lib.optionals (pythonOlder "3.8") [
# flaky test https://github.com/ipython/ipykernel/issues/485
"test_shutdown"
# test regression https://github.com/ipython/ipykernel/issues/486
"test_sys_path_profile_dir"
"test_save_history"
"test_help_output"
"test_write_kernel_spec"
"test_ipython_start_kernel_userns"
"ZMQDisplayPublisherTests"
]);
# Some of the tests use localhost networking.
__darwinAllowLocalNetworking = true;
}

View File

@ -0,0 +1,72 @@
{ lib
, stdenv
, buildPythonPackage
, fetchPypi
, fetchpatch
# Build dependencies
, glibcLocales
# Test dependencies
, nose
, pygments
, testpath
, isPy27
, mock
# Runtime dependencies
, backports_shutil_get_terminal_size
, decorator
, pathlib2
, pickleshare
, requests
, simplegeneric
, traitlets
, prompt-toolkit
, pexpect
, appnope
}:
buildPythonPackage rec {
pname = "ipython";
version = "5.8.0";
src = fetchPypi {
inherit pname version;
sha256 = "4bac649857611baaaf76bc82c173aa542f7486446c335fe1a6c05d0d491c8906";
};
prePatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace setup.py --replace "'gnureadline'" " "
'';
patches = [
# Use the proper pygments lexer for python2 (https://github.com/ipython/ipython/pull/12095)
(fetchpatch {
name = "python2-lexer.patch";
url = "https://github.com/ipython/ipython/pull/12095/commits/8805293b5e4bce9150cc2ad9c5d6d984849ae447.patch";
sha256 = "16p4gl7a49v76w33j39ih7yspy6x2d14p9bh4wdpg9cafhw9nbc0";
})
];
buildInputs = [ glibcLocales ];
checkInputs = [ nose pygments testpath ] ++ lib.optional isPy27 mock;
propagatedBuildInputs = [
backports_shutil_get_terminal_size decorator pickleshare prompt-toolkit
simplegeneric traitlets requests pathlib2 pexpect
] ++ lib.optionals stdenv.isDarwin [ appnope ];
LC_ALL="en_US.UTF-8";
doCheck = false; # Circular dependency with ipykernel
checkPhase = ''
nosetests
'';
meta = {
description = "IPython: Productive Interactive Computing";
homepage = "http://ipython.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ bjornfor orivej lnl7 ];
};
}

View File

@ -0,0 +1,69 @@
{ lib
, stdenv
, buildPythonPackage
, fetchPypi
, pythonOlder
# Build dependencies
, glibcLocales
# Test dependencies
, nose
, pygments
# Runtime dependencies
, jedi
, decorator
, pickleshare
, traitlets
, prompt-toolkit
, pexpect
, appnope
, backcall
}:
buildPythonPackage rec {
pname = "ipython";
version = "7.16.1";
disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
sha256 = "9f4fcb31d3b2c533333893b9172264e4821c1ac91839500f31bd43f2c59b3ccf";
};
prePatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace setup.py --replace "'gnureadline'" " "
'';
buildInputs = [ glibcLocales ];
checkInputs = [ nose pygments ];
propagatedBuildInputs = [
jedi
decorator
pickleshare
traitlets
prompt-toolkit
pygments
pexpect
backcall
] ++ lib.optionals stdenv.isDarwin [appnope];
LC_ALL="en_US.UTF-8";
doCheck = false; # Circular dependency with ipykernel
checkPhase = ''
nosetests
'';
pythonImportsCheck = [
"IPython"
];
meta = with lib; {
description = "IPython: Productive Interactive Computing";
homepage = "http://ipython.org/";
license = licenses.bsd3;
maintainers = with maintainers; [ bjornfor fridh ];
};
}

View File

@ -0,0 +1,73 @@
{ lib
, stdenv
, buildPythonPackage
, fetchPypi
, fetchpatch
, pythonOlder
# Build dependencies
, glibcLocales
# Test dependencies
, nose
, pygments
# Runtime dependencies
, jedi
, decorator
, matplotlib-inline
, pickleshare
, traitlets
, prompt-toolkit
, pexpect
, appnope
, backcall
, pytest
}:
buildPythonPackage rec {
pname = "ipython";
version = "7.33.0";
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-vP+4Zag7CBYgMBug7E2VCERU8muR1tZrR1v/PfsCGNQ=";
};
prePatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace setup.py --replace "'gnureadline'" " "
'';
buildInputs = [ glibcLocales ];
propagatedBuildInputs = [
jedi
decorator
matplotlib-inline
pickleshare
traitlets
prompt-toolkit
pygments
pexpect
backcall
] ++ lib.optionals stdenv.isDarwin [appnope];
LC_ALL="en_US.UTF-8";
# full tests normally disabled due to a circular dependency with
# ipykernel, but we want to test the CVE-2022-21699 fix in this
# branch
checkInputs = [ pytest ];
checkPhase = ''
pytest IPython/tests/cve.py
'';
pythonImportsCheck = [
"IPython"
];
meta = with lib; {
description = "IPython: Productive Interactive Computing";
homepage = "http://ipython.org/";
license = licenses.bsd3;
maintainers = with maintainers; [ bjornfor fridh ];
};
}

View File

@ -0,0 +1,40 @@
{ lib
, buildPythonPackage
, fetchPypi
, traitlets
, jupyter_core
, pyzmq
, python-dateutil
, isPyPy
, py
, tornado
}:
buildPythonPackage rec {
pname = "jupyter-client";
version = "5.3.5";
src = fetchPypi {
pname = "jupyter_client";
inherit version;
sha256 = "5efdf4131124d4a0d5789101e74827022585f172d2f4b60cf6fa98e0a7511b25";
};
propagatedBuildInputs = [
traitlets
jupyter_core
pyzmq
python-dateutil
tornado
] ++ lib.optional isPyPy py;
# Circular dependency with ipykernel
doCheck = false;
meta = {
description = "Jupyter protocol implementation and client libraries";
homepage = "https://jupyter.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ ];
};
}

View File

@ -0,0 +1,43 @@
{ lib
, buildPythonPackage
, fetchPypi
, entrypoints
, jupyter_core
, nest-asyncio
, python-dateutil
, pyzmq
, tornado
, traitlets
, isPyPy
, py
}:
buildPythonPackage rec {
pname = "jupyter_client";
version = "7.1.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-pfmVpzz/sxTtJicTrm385TxrghbOqfMyBxuP9EpuFlQ=";
};
propagatedBuildInputs = [
entrypoints
jupyter_core
nest-asyncio
python-dateutil
pyzmq
tornado
traitlets
] ++ lib.optional isPyPy py;
# Circular dependency with ipykernel
doCheck = false;
meta = {
description = "Jupyter protocol implementation and client libraries";
homepage = "https://jupyter.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ fridh ];
};
}

View File

@ -0,0 +1,32 @@
{ lib
, black
, buildPythonPackage
, fetchFromGitHub
, pytestCheckHook
, python-lsp-server
, pythonOlder
}:
buildPythonPackage rec {
pname = "python-lsp-black";
version = "1.2.1";
disabled = pythonOlder "3.6";
src = fetchFromGitHub {
owner = "python-lsp";
repo = "python-lsp-black";
rev = "v${version}";
sha256 = "sha256-qNA6Bj1VI0YEtRuvcMQZGWakQNNrJ2PqhozrLmQHPAg=";
};
checkInputs = [ pytestCheckHook ];
propagatedBuildInputs = [ black python-lsp-server ];
meta = with lib; {
homepage = "https://github.com/python-lsp/python-lsp-black";
description = "Black plugin for the Python LSP Server";
license = licenses.mit;
maintainers = with maintainers; [ cpcloud ];
};
}

View File

@ -0,0 +1,108 @@
{ lib
, autopep8
, buildPythonPackage
, fetchPypi
, flake8
, flaky
, jedi
, matplotlib
, mccabe
, numpy
, pandas
, pluggy
, pycodestyle
, pydocstyle
, pyflakes
, pylint
, pyqt5
, pytestCheckHook
, python-lsp-jsonrpc
, pythonOlder
, rope
, setuptools
, setuptools_scm
, ujson
, yapf
, withAutopep8 ? true
, withFlake8 ? true
, withMccabe ? true
, withPycodestyle ? true
, withPydocstyle ? true
, withPyflakes ? true
, withPylint ? true
, withRope ? true
, withYapf ? true
}:
buildPythonPackage rec {
pname = "python-lsp-server";
version = "1.4.1";
disabled = pythonOlder "3.6";
src = fetchPypi {
pname = "python-lsp-server";
inherit version;
sha256 = "sha256-vn+DKYr58JUak5csr8nbBP189cBfIIElFSdfC6cONC8=";
};
postPatch = ''
substituteInPlace setup.cfg \
--replace "--cov-report html --cov-report term --junitxml=pytest.xml" "" \
--replace "--cov pylsp --cov test" ""
'';
propagatedBuildInputs = [
jedi
pluggy
python-lsp-jsonrpc
setuptools
setuptools_scm
ujson
] ++ lib.optional withAutopep8 autopep8
++ lib.optional withFlake8 flake8
++ lib.optional withMccabe mccabe
++ lib.optional withPycodestyle pycodestyle
++ lib.optional withPydocstyle pydocstyle
++ lib.optional withPyflakes pyflakes
++ lib.optional withPylint pylint
++ lib.optional withRope rope
++ lib.optional withYapf yapf;
checkInputs = [
flaky
matplotlib
numpy
pandas
pyqt5
pytestCheckHook
];
disabledTests = [
# pytlint output changed
"test_lint_free_pylint"
] ++ lib.optional (!withPycodestyle) "test_workspace_loads_pycodestyle_config";
disabledTestPaths = lib.optional (!withAutopep8) "test/plugins/test_autopep8_format.py"
++ lib.optional (!withRope) "test/plugins/test_completion.py"
++ lib.optional (!withFlake8) "test/plugins/test_flake8_lint.py"
++ lib.optional (!withMccabe) "test/plugins/test_mccabe_lint.py"
++ lib.optional (!withPycodestyle) "test/plugins/test_pycodestyle_lint.py"
++ lib.optional (!withPydocstyle) "test/plugins/test_pydocstyle_lint.py"
++ lib.optional (!withPyflakes) "test/plugins/test_pyflakes_lint.py"
++ lib.optional (!withPylint) "test/plugins/test_pylint_lint.py"
++ lib.optional (!withRope) "test/plugins/test_rope_rename.py"
++ lib.optional (!withYapf) "test/plugins/test_yapf_format.py";
preCheck = ''
export HOME=$(mktemp -d);
'';
pythonImportsCheck = [ "pylsp" ];
meta = with lib; {
description = "Python implementation of the Language Server Protocol";
homepage = "https://github.com/python-lsp/python-lsp-server";
license = licenses.mit;
maintainers = with maintainers; [ fab ];
};
}

View File

@ -0,0 +1,29 @@
{ lib
, fetchPypi
, buildPythonPackage
, helpdev
, qtpy
}:
buildPythonPackage rec {
pname = "qdarkstyle";
version = "3.0.3";
src = fetchPypi {
inherit version;
pname = "QDarkStyle";
sha256 = "sha256-k20tNbVS9CmAOphdvBf8h5ovlm+qn7+Jg4lsz6M+aPY=";
};
# No tests available
doCheck = false;
propagatedBuildInputs = [ helpdev qtpy ];
meta = with lib; {
description = "A dark stylesheet for Python and Qt applications";
homepage = "https://github.com/ColinDuquesnoy/QDarkStyleSheet";
license = licenses.mit;
maintainers = with maintainers; [ nyanloutre ];
};
}

View File

@ -0,0 +1,38 @@
{ lib
, buildPythonPackage
, fetchPypi
, nose
, isPy27
, mock
, traitlets
, jupyter_core
, jupyter-client
, pygments
, ipykernel
, pyqt5
, qtpy
}:
buildPythonPackage rec {
pname = "qtconsole";
version = "5.3.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-jjUg/cdeRqvEzGz/7KFvomUnVBCbiug5+ijifR66ViU=";
};
checkInputs = [ nose ] ++ lib.optionals isPy27 [mock];
propagatedBuildInputs = [traitlets jupyter_core jupyter-client pygments ipykernel pyqt5 qtpy];
# : cannot connect to X server
doCheck = false;
meta = {
description = "Jupyter Qt console";
homepage = "https://jupyter.org/";
license = lib.licenses.bsd3;
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ fridh ];
};
}

View File

@ -0,0 +1,27 @@
{ lib, buildPythonPackage, fetchPypi, pyside, pytest, packaging }:
buildPythonPackage rec {
pname = "QtPy";
version = "2.1.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-yozUIXF1GGNEKZ7kwPfnrc82LHCFK6NbJVpTQHcCXAY=";
};
propagatedBuildInputs = [ packaging ];
# no concrete propagatedBuildInputs as multiple backends are supposed
checkInputs = [ pyside pytest ];
doCheck = false; # require X
checkPhase = ''
py.test qtpy/tests
'';
meta = with lib; {
description = "Abstraction layer for PyQt5/PyQt4/PySide2/PySide";
homepage = "https://github.com/spyder-ide/qtpy";
license = licenses.mit;
};
}

View File

@ -0,0 +1,32 @@
{ lib, buildPythonPackage, fetchPypi, cloudpickle, ipykernel, wurlitzer,
jupyter-client, pyzmq }:
buildPythonPackage rec {
pname = "spyder-kernels";
version = "2.3.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-pdU20Oil53TX1hbBAqj6LWqkX9MwoLeZuY7vFYNW02w=";
};
propagatedBuildInputs = [
cloudpickle
ipykernel
wurlitzer
jupyter-client
pyzmq
];
# No tests
doCheck = false;
meta = with lib; {
description = "Jupyter kernels for Spyder's console";
homepage = "https://docs.spyder-ide.org/current/ipythonconsole.html";
downloadPage = "https://github.com/spyder-ide/spyder-kernels/releases";
changelog = "https://github.com/spyder-ide/spyder-kernels/blob/master/CHANGELOG.md";
license = licenses.mit;
maintainers = with maintainers; [ gebner ];
};
}

View File

@ -0,0 +1,122 @@
{ lib, buildPythonPackage, fetchPypi, isPy27, makeDesktopItem, intervaltree,
jedi, pycodestyle, psutil, rope, numpy, scipy, matplotlib, pylint,
keyring, numpydoc, qtconsole, qtawesome, nbconvert, mccabe, pyopengl,
cloudpickle, pygments, spyder-kernels, qtpy, pyzmq, chardet, qdarkstyle,
watchdog, python-lsp-server, pyqtwebengine, atomicwrites, pyxdg,
diff-match-patch, three-merge, python-lsp-black, pyls-spyder, flake8, textdistance,
cookiecutter, libspatialindex, fetchFromGitHub, pbr, inflection, tinycss2, jellyfish,
autopep8
}:
buildPythonPackage rec {
pname = "spyder";
version = "5.3.0";
disabled = isPy27;
src = fetchPypi {
inherit pname version;
sha256 = "sha256-ggCFvYUdUm5fVSpTZoN/OhNPJAQOyehwrQprYTzprbc=";
};
nativeBuildInputs = [ pyqtwebengine.wrapQtAppsHook ];
propagatedBuildInputs = [
intervaltree jedi pycodestyle psutil rope numpy scipy matplotlib pylint keyring
numpydoc qtconsole qtawesome nbconvert mccabe pyopengl cloudpickle spyder-kernels
pygments qtpy pyzmq chardet pyqtwebengine qdarkstyle watchdog python-lsp-server
atomicwrites pyxdg diff-match-patch three-merge python-lsp-black pyls-spyder
flake8 textdistance cookiecutter jellyfish autopep8
(
buildPythonPackage rec {
pname = "Rtree";
version = "1.0.0";
propagatedBuildInputs = [ numpy ];
src = fetchPypi {
inherit pname version;
sha256 = "sha256-0Eg0ghITRrCTuaQlGNQPkhrfRFkVt66jB+smdoyDloI=";
};
doCheck = false;
patchPhase =
''
substituteInPlace rtree/finder.py --replace "_candidates = [" "_candidates = ['${libspatialindex}/lib',"
'';
}
)
(
buildPythonPackage rec {
pname = "qstylizer";
version = "0.2.1";
propagatedBuildInputs = [ pbr inflection tinycss2 ];
src = fetchFromGitHub {
owner = "blambright";
repo = "qstylizer";
rev = version;
sha256 = "sha256-iEMxBpS9gOPubd9O8zpVmR5B7+UZJFkPuOtikO1a9v0=";
};
preBuild = ''
export PBR_VERSION=${version}
'';
doCheck = false;
}
)
];
# There is no test for spyder
doCheck = false;
desktopItem = makeDesktopItem {
name = "Spyder";
exec = "spyder";
icon = "spyder";
comment = "Scientific Python Development Environment";
desktopName = "Spyder";
genericName = "Python IDE";
categories = "Development;IDE;";
};
postPatch = ''
# remove dependency on pyqtwebengine
# this is still part of the pyqt 5.11 version we have in nixpkgs
sed -i /pyqtwebengine/d setup.py
# The major version bump in watchdog is due to changes in supported
# platforms, not API break.
# https://github.com/gorakhargosh/watchdog/issues/761#issuecomment-777001518
substituteInPlace setup.py \
--replace "pyqt5<5.13" "pyqt5" \
--replace "parso==0.7.0" "parso" \
--replace "watchdog>=0.10.3,<2.0.0" "watchdog>=0.10.3,<3.0.0"
'';
postInstall = ''
# add Python libs to env so Spyder subprocesses
# created to run compute kernels don't fail with ImportErrors
wrapProgram $out/bin/spyder --prefix PYTHONPATH : "$PYTHONPATH"
# Create desktop item
mkdir -p $out/share/icons
cp spyder/images/spyder.svg $out/share/icons
cp -r $desktopItem/share/applications/ $out/share
'';
dontWrapQtApps = true;
preFixup = ''
makeWrapperArgs+=("''${qtWrapperArgs[@]}")
'';
meta = with lib; {
description = "Scientific python development environment";
longDescription = ''
Spyder (previously known as Pydee) is a powerful interactive development
environment for the Python language with advanced editing, interactive
testing, debugging and introspection features.
'';
homepage = "https://www.spyder-ide.org/";
downloadPage = "https://github.com/spyder-ide/spyder/releases";
changelog = "https://github.com/spyder-ide/spyder/blob/master/CHANGELOG.md";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ gebner ];
};
}