depot/third_party/nixpkgs/pkgs/development/python-modules/orange3/default.nix

225 lines
5.1 KiB
Nix
Raw Normal View History

{
lib,
stdenv,
baycomp,
bottleneck,
buildPythonPackage,
chardet,
copyDesktopItems,
pythonRelaxDepsHook,
cython,
catboost,
xgboost,
fetchFromGitHub,
fetchurl,
httpx,
joblib,
keyring,
keyrings-alt,
makeDesktopItem,
matplotlib,
nix-update-script,
numpy,
oldest-supported-numpy,
openpyxl,
opentsne,
orange-canvas-core,
orange-widget-base,
pandas,
pytestCheckHook,
pytest-qt,
pyqtgraph,
pyqtwebengine,
python,
python-louvain,
pythonOlder,
pyyaml,
pip,
qt5,
qtconsole,
recommonmark,
requests,
scikit-learn,
scipy,
serverfiles,
setuptools,
sphinx,
wheel,
xlrd,
xlsxwriter,
}:
let
self = buildPythonPackage rec {
pname = "orange3";
version = "3.36.2";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchFromGitHub {
owner = "biolab";
repo = "orange3";
rev = "refs/tags/${version}";
hash = "sha256-v9lk5vGhBaR2PHZ+Jq0hy1WaCsbeLe+vZlTaHBkfacU=";
};
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail 'cython>=3.0' 'cython'
# disable update checking
echo -e "def check_for_updates():\n\tpass" >> Orange/canvas/__main__.py
'';
nativeBuildInputs = [
copyDesktopItems
pythonRelaxDepsHook
oldest-supported-numpy
cython
qt5.wrapQtAppsHook
recommonmark
setuptools
sphinx
wheel
];
enableParallelBuilding = true;
pythonRelaxDeps = [ "scikit-learn" ];
propagatedBuildInputs = [
numpy
scipy
chardet
catboost
xgboost
openpyxl
opentsne
qtconsole
setuptools
bottleneck
matplotlib
joblib
requests
keyring
scikit-learn
pandas
pyqtwebengine
serverfiles
orange-canvas-core
python-louvain
xlrd
xlsxwriter
httpx
pyqtgraph
orange-widget-base
keyrings-alt
pyyaml
baycomp
pip
];
# FIXME: ImportError: cannot import name '_variable' from partially initialized module 'Orange.data' (most likely due to a circular import) (/build/source/Orange/data/__init__.py)
doCheck = false;
# FIXME: pythonRelaxDeps is not relaxing the scikit-learn version constraint, had to disable this
dontCheckRuntimeDeps = true;
pythonImportsCheck = [
"Orange"
"Orange.data._variable"
];
desktopItems = [
(makeDesktopItem {
name = "orange";
exec = "orange-canvas";
desktopName = "Orange Data Mining";
genericName = "Data Mining Suite";
comment = "Explore, analyze, and visualize your data";
icon = "orange-canvas";
mimeTypes = [ "application/x-extension-ows" ];
categories = [
"Science"
"Education"
"ArtificialIntelligence"
"DataVisualization"
"NumericalAnalysis"
"Qt"
];
keywords = [
"Machine Learning"
"Scientific Visualization"
"Statistical Analysis"
];
})
];
postInstall = ''
wrapProgram $out/bin/orange-canvas \
"${"$"}{qtWrapperArgs[@]}"
mkdir -p $out/share/icons/hicolor/{256x256,48x48}/apps
cp distribute/icon-256.png $out/share/icons/hicolor/256x256/apps/orange-canvas.png
cp distribute/icon-48.png $out/share/icons/hicolor/48x48/apps/orange-canvas.png
'';
passthru = {
updateScript = nix-update-script { };
tests.unittests = stdenv.mkDerivation {
name = "${self.name}-tests";
inherit (self) src;
preCheck = ''
export HOME=$(mktemp -d)
export QT_PLUGIN_PATH="${qt5.qtbase.bin}/${qt5.qtbase.qtPluginPrefix}"
export QT_QPA_PLATFORM_PLUGIN_PATH="${qt5.qtbase.bin}/lib/qt-${qt5.qtbase.version}/plugins";
export QT_QPA_PLATFORM=offscreen
rm Orange -rf
cp -r ${self}/${python.sitePackages}/Orange .
chmod +w -R .
substituteInPlace Orange/classification/tests/test_xgb_cls.py \
--replace test_learners mk_test_learners
substituteInPlace Orange/modelling/tests/test_xgb.py \
--replace test_learners mk_test_learners
substituteInPlace Orange/**/tests/*.py \
--replace test_filename filename_test
# TODO: debug why orange is crashing on GC, may be a upstream issue
chmod +x Orange/__init__.py
echo "import gc; gc.disable()" | tee -a Orange/__init__.py
'';
nativeBuildInputs = [
pytestCheckHook
pytest-qt
];
postCheck = ''
touch $out
'';
doBuild = false;
doInstall = false;
buildInputs = [ self ];
};
};
meta = with lib; {
description = "Data mining and visualization toolbox for novice and expert alike";
homepage = "https://orangedatamining.com/";
changelog = "https://github.com/biolab/orange3/blob/${version}/CHANGELOG.md";
license = with licenses; [ gpl3Plus ];
maintainers = with maintainers; [ lucasew ];
mainProgram = "orange-canvas";
};
};
in
self