From 08508f5319322ec919c7bdb80e9a4a1d49dcaa11 Mon Sep 17 00:00:00 2001 From: Dan Haraj Date: Tue, 14 Nov 2017 14:27:13 -0500 Subject: [PATCH 1/6] absl-py: init at 0.1.3 --- lib/maintainers.nix | 1 + .../python-modules/absl-py/default.nix | 28 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 pkgs/development/python-modules/absl-py/default.nix diff --git a/lib/maintainers.nix b/lib/maintainers.nix index 01e56168140..f0a2a803846 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -145,6 +145,7 @@ DamienCassou = "Damien Cassou "; danbst = "Danylo Hlynskyi "; dancek = "Hannu Hartikainen "; + danharaj = "Dan Haraj "; danielfullmer = "Daniel Fullmer "; dasuxullebt = "Christoph-Simon Senjak "; david50407 = "David Kuo "; diff --git a/pkgs/development/python-modules/absl-py/default.nix b/pkgs/development/python-modules/absl-py/default.nix new file mode 100644 index 00000000000..3f37820fd35 --- /dev/null +++ b/pkgs/development/python-modules/absl-py/default.nix @@ -0,0 +1,28 @@ +{ buildPythonPackage +, lib +, fetchPypi +, six +}: + +buildPythonPackage rec { + pname = "absl-py"; + version = "0.1.3"; + name = "${pname}-${version}"; + + src = fetchPypi { + inherit pname version; + sha256 = "017wc85i7l3vpjzw3shgb7k7n0jfid88g09dlf1kgdy4ll0sjfax"; + }; + + propagatedBuildInputs = [ six ]; + + # checks use bazel; should be revisited + doCheck = false; + + meta = { + description = "Abseil Python Common Libraries"; + homepage = "https://github.com/abseil/abseil-py"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ danharaj ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f4a7f9996eb..1d6527b65c5 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -106,6 +106,8 @@ in { # Left for backwards compatibility "3to2" = self.py3to2; + absl-py = callPackage ../development/python-modules/absl-py { }; + aenum = callPackage ../development/python-modules/aenum { }; affinity = callPackage ../development/python-modules/affinity { }; From 1327d0979344478f1725ad00bd9adcce09f18cdf Mon Sep 17 00:00:00 2001 From: Dan Haraj Date: Tue, 14 Nov 2017 14:29:50 -0500 Subject: [PATCH 2/6] mpyq: init at 0.2.5 --- .../python-modules/mpyq/default.nix | 22 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 24 insertions(+) create mode 100644 pkgs/development/python-modules/mpyq/default.nix diff --git a/pkgs/development/python-modules/mpyq/default.nix b/pkgs/development/python-modules/mpyq/default.nix new file mode 100644 index 00000000000..2be1c34c01c --- /dev/null +++ b/pkgs/development/python-modules/mpyq/default.nix @@ -0,0 +1,22 @@ +{ buildPythonPackage +, lib +, fetchPypi +}: + +buildPythonPackage rec { + pname = "mpyq"; + version = "0.2.5"; + name = "${pname}-${version}"; + + src = fetchPypi { + inherit pname version; + sha256 = "01q0xh2fy3zzsrfr45d2ypj4whs7s060cy1rnprg6sg55fbgbaih"; + }; + + meta = { + description = "A Python library for extracting MPQ (MoPaQ) files."; + homepage = "https://github.com/eagleflo/mpyq"; + license = lib.licenses.bsd2; + maintainers = with lib.maintainers; [ danharaj ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 1d6527b65c5..c485e443df6 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3323,6 +3323,8 @@ in { }; }; + mpyq = callPackage ../development/python-modules/mpyq { }; + mxnet = buildPythonPackage rec { inherit (pkgs.mxnet) name version src meta; From 2201774048abc97318d9ab7fcc14728c14c148e4 Mon Sep 17 00:00:00 2001 From: Dan Haraj Date: Tue, 14 Nov 2017 14:30:47 -0500 Subject: [PATCH 3/6] portpicker: init at 1.2.0 --- .../python-modules/portpicker/default.nix | 22 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 24 insertions(+) create mode 100644 pkgs/development/python-modules/portpicker/default.nix diff --git a/pkgs/development/python-modules/portpicker/default.nix b/pkgs/development/python-modules/portpicker/default.nix new file mode 100644 index 00000000000..3e753ab7e06 --- /dev/null +++ b/pkgs/development/python-modules/portpicker/default.nix @@ -0,0 +1,22 @@ +{ buildPythonPackage +, lib +, fetchPypi +}: + +buildPythonPackage rec { + pname = "portpicker"; + version = "1.2.0"; + name = "${pname}-${version}"; + + src = fetchPypi { + inherit pname version; + sha256 = "0c1lm3i4yngi1qclb0hny19vwjd2si5k2qni30wcrnxqqasqak1y"; + }; + + meta = { + description = "A library to choose unique available network ports."; + homepage = "https://github.com/google/python_portpicker"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ danharaj ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c485e443df6..42245162f50 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3345,6 +3345,8 @@ in { ''; }; + portpicker = callPackage ../development/python-modules/portpicker { }; + pkginfo = buildPythonPackage rec { version = "1.3.2"; name = "pkginfo-${version}"; From ced67b114a857b00367230fb53aa9fc4ea46b94b Mon Sep 17 00:00:00 2001 From: Dan Haraj Date: Tue, 14 Nov 2017 14:32:21 -0500 Subject: [PATCH 4/6] s2clientprotocol: init at 3.19.1.58600.0 --- .../s2clientprotocol/default.nix | 27 +++++++++++++++++++ .../s2clientprotocol/pure-version.patch | 13 +++++++++ pkgs/top-level/python-packages.nix | 1 + 3 files changed, 41 insertions(+) create mode 100644 pkgs/development/python-modules/s2clientprotocol/default.nix create mode 100644 pkgs/development/python-modules/s2clientprotocol/pure-version.patch diff --git a/pkgs/development/python-modules/s2clientprotocol/default.nix b/pkgs/development/python-modules/s2clientprotocol/default.nix new file mode 100644 index 00000000000..3c24a7e522d --- /dev/null +++ b/pkgs/development/python-modules/s2clientprotocol/default.nix @@ -0,0 +1,27 @@ +{ buildPythonPackage +, lib +, fetchPypi +, protobuf +}: + +buildPythonPackage rec { + pname = "s2clientprotocol"; + version = "3.19.1.58600.0"; + name = "${pname}-${version}"; + + src = fetchPypi { + inherit pname version; + sha256 = "02jqwdfj5zpag4c5nf0707qmwk7sqm98yfgrd19rq6pi58zgl74f"; + }; + + patches = [ ./pure-version.patch ]; + + buildInputs = [ protobuf ]; + + meta = { + description = "StarCraft II - client protocol."; + homepage = "https://github.com/Blizzard/sc2client-proto"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ danharaj ]; + }; +} diff --git a/pkgs/development/python-modules/s2clientprotocol/pure-version.patch b/pkgs/development/python-modules/s2clientprotocol/pure-version.patch new file mode 100644 index 00000000000..43675c3bb11 --- /dev/null +++ b/pkgs/development/python-modules/s2clientprotocol/pure-version.patch @@ -0,0 +1,13 @@ +diff --git a/setup.py b/setup.py +index 89131a8..19527df 100755 +--- a/setup.py ++++ b/setup.py +@@ -13,8 +13,6 @@ from distutils.spawn import find_executable + from setuptools import setup + from setuptools.command.build_py import build_py + +-import gameversion_autogen as ver +- + SETUP_DIR = os.path.dirname(os.path.abspath(__file__)) + PROTO_DIR = os.path.join(SETUP_DIR, 's2clientprotocol') + diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 42245162f50..8931f6b346f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7184,6 +7184,7 @@ in { meta.broken = true; # Tests fail, and no reverse-dependencies anyway }; + s2clientprotocol = callPackage ../development/python-modules/s2clientprotocol { }; statsd = buildPythonPackage rec { name = "statsd-${version}"; From bdce7d3a04ea3ebaebe033da13e3c6651845e45f Mon Sep 17 00:00:00 2001 From: Dan Haraj Date: Tue, 14 Nov 2017 14:34:06 -0500 Subject: [PATCH 5/6] sc2-headless: add pysc2 minigame map pack --- .../science/machine-learning/sc2-headless/default.nix | 7 ++++++- .../science/machine-learning/sc2-headless/maps.nix | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 pkgs/applications/science/machine-learning/sc2-headless/maps.nix diff --git a/pkgs/applications/science/machine-learning/sc2-headless/default.nix b/pkgs/applications/science/machine-learning/sc2-headless/default.nix index c06bfc04e07..517edd0d779 100644 --- a/pkgs/applications/science/machine-learning/sc2-headless/default.nix +++ b/pkgs/applications/science/machine-learning/sc2-headless/default.nix @@ -1,4 +1,5 @@ { stdenv +, callPackage , lib , fetchurl , unzip @@ -11,7 +12,8 @@ if !licenseAccepted then throw '' by setting nixpkgs config option 'sc2-headless.accept_license = true;' '' else assert licenseAccepted; -stdenv.mkDerivation rec { +let maps = callPackage ./maps.nix {}; +in stdenv.mkDerivation rec { version = "3.17"; name = "sc2-headless-${version}"; @@ -30,6 +32,8 @@ stdenv.mkDerivation rec { mkdir -p $out cp -r . "$out" rm -r $out/Libs + + cp -r "${maps.minigames}"/* "$out"/Maps/ ''; preFixup = '' @@ -50,5 +54,6 @@ stdenv.mkDerivation rec { url = "https://blzdistsc2-a.akamaihd.net/AI_AND_MACHINE_LEARNING_LICENSE.html"; free = false; }; + maintainers = with lib.maintainers; [ danharaj ]; }; } diff --git a/pkgs/applications/science/machine-learning/sc2-headless/maps.nix b/pkgs/applications/science/machine-learning/sc2-headless/maps.nix new file mode 100644 index 00000000000..4300a0a1b38 --- /dev/null +++ b/pkgs/applications/science/machine-learning/sc2-headless/maps.nix @@ -0,0 +1,11 @@ +{ fetchzip +}: + +{ + minigames = fetchzip { + url = "https://github.com/deepmind/pysc2/releases/download/v1.2/mini_games.zip"; + sha256 = "19f873ilcdsf50g2v0s2zzmxil1bqncsk8nq99bzy87h0i7khkla"; + stripRoot = false; + }; + +} From 6a70e7f7c84ed422d5f027f0f4d0d7523ceabb56 Mon Sep 17 00:00:00 2001 From: Dan Haraj Date: Tue, 14 Nov 2017 14:34:44 -0500 Subject: [PATCH 6/6] pysc2: init at 1.2 --- .../python-modules/pysc2/default.nix | 64 +++++++++++++++++++ .../pysc2/fix-setup-for-py3.patch | 64 +++++++++++++++++++ .../parameterize-runconfig-sc2path.patch | 18 ++++++ pkgs/top-level/python-packages.nix | 2 + 4 files changed, 148 insertions(+) create mode 100644 pkgs/development/python-modules/pysc2/default.nix create mode 100644 pkgs/development/python-modules/pysc2/fix-setup-for-py3.patch create mode 100644 pkgs/development/python-modules/pysc2/parameterize-runconfig-sc2path.patch diff --git a/pkgs/development/python-modules/pysc2/default.nix b/pkgs/development/python-modules/pysc2/default.nix new file mode 100644 index 00000000000..a2dfd53b795 --- /dev/null +++ b/pkgs/development/python-modules/pysc2/default.nix @@ -0,0 +1,64 @@ +{ buildPythonPackage +, lib +, fetchFromGitHub +, absl-py +, enum34 +, future +, futures +, mock +, mpyq +, numpy +, portpicker +, protobuf +, pygame +, s2clientprotocol +, six +, websocket_client +, sc2-headless +}: + +buildPythonPackage rec { + version = "1.2"; + name = "PySC2-${version}"; + + src = fetchFromGitHub { + owner = "deepmind"; + repo = "pysc2"; + rev = "39f84b01d662eb58b3d95791f59208c210afd4e7"; + sha256 = "0dfbc2krd2rys1ji75ng2nl0ki8nhnylxljcp287bfb8qyz2m25p"; + }; + + patches = [ + ./fix-setup-for-py3.patch + ./parameterize-runconfig-sc2path.patch + ]; + + postPatch = '' + substituteInPlace "./pysc2/run_configs/platforms.py" \ + --subst-var-by 'sc2path' '${sc2-headless}' + ''; + + propagatedBuildInputs = [ + absl-py + enum34 + future + mock + mpyq + numpy + portpicker + protobuf + pygame + s2clientprotocol + six + websocket_client + sc2-headless + ]; + + meta = { + description = "Starcraft II environment and library for training agents."; + homepage = "https://github.com/deepmind/pysc2"; + license = lib.licenses.asl20; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ danharaj ]; + }; +} diff --git a/pkgs/development/python-modules/pysc2/fix-setup-for-py3.patch b/pkgs/development/python-modules/pysc2/fix-setup-for-py3.patch new file mode 100644 index 00000000000..b1a2b4e2350 --- /dev/null +++ b/pkgs/development/python-modules/pysc2/fix-setup-for-py3.patch @@ -0,0 +1,64 @@ +diff --git a/setup.py b/setup.py +index 020768f..13c2b67 100755 +--- a/setup.py ++++ b/setup.py +@@ -17,6 +17,8 @@ from __future__ import absolute_import + from __future__ import division + from __future__ import print_function + ++import sys ++ + from setuptools import setup + + description = """PySC2 - StarCraft II Learning Environment +@@ -36,6 +38,27 @@ some initial research results using the environment. + Read the README at https://github.com/deepmind/pysc2 for more information. + """ + ++requires = [ ++ 'absl-py>=0.1.0', ++ 'future', ++ 'mock', ++ 'mpyq', ++ 'numpy>=1.10', ++ 'portpicker>=1.2.0', ++ 'protobuf>=2.6', ++ 'pygame', ++ 's2clientprotocol>=3.19.0.58400.0', ++ 'six', ++ 'websocket-client', ++] ++ ++if sys.version_info[0] == 2: ++ requires.append('futures') ++ ++if (sys.version_info[0] == 2 ++ or (sys.version_info[0] == 3 and sys.version_info[1] < 4)): ++ requires.append('enum34') ++ + setup( + name='PySC2', + version='1.2', +@@ -56,21 +79,7 @@ setup( + 'pysc2.run_configs', + 'pysc2.tests', + ], +- install_requires=[ +- 'absl-py>=0.1.0', +- 'enum34', +- 'future', +- 'futures', +- 'mock', +- 'mpyq', +- 'numpy>=1.10', +- 'portpicker>=1.2.0', +- 'protobuf>=2.6', +- 'pygame', +- 's2clientprotocol>=3.19.0.58400.0', +- 'six', +- 'websocket-client', +- ], ++ install_requires=requires, + entry_points={ + 'console_scripts': [ + 'pysc2_agent = pysc2.bin.agent:entry_point', diff --git a/pkgs/development/python-modules/pysc2/parameterize-runconfig-sc2path.patch b/pkgs/development/python-modules/pysc2/parameterize-runconfig-sc2path.patch new file mode 100644 index 00000000000..be667503d47 --- /dev/null +++ b/pkgs/development/python-modules/pysc2/parameterize-runconfig-sc2path.patch @@ -0,0 +1,18 @@ +diff --git a/pysc2/run_configs/platforms.py b/pysc2/run_configs/platforms.py +index 5cd84f9..1923cb7 100644 +--- a/pysc2/run_configs/platforms.py ++++ b/pysc2/run_configs/platforms.py +@@ -119,12 +119,9 @@ class Linux(LocalBase): + """Config to run on Linux.""" + + def __init__(self): +- base_dir = os.environ.get("SC2PATH", "~/StarCraftII") ++ base_dir = os.environ.get("SC2PATH", "@sc2path@") + base_dir = os.path.expanduser(base_dir) + env = copy.deepcopy(os.environ) +- env["LD_LIBRARY_PATH"] = ":".join(filter(None, [ +- os.environ.get("LD_LIBRARY_PATH"), +- os.path.join(base_dir, "Libs/")])) + super(Linux, self).__init__(base_dir, "SC2_x64", env=env) + + @classmethod diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8931f6b346f..f0d78dd4891 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -270,6 +270,8 @@ in { pythonPackages = self; }; + pysc2 = callPackage ../development/python-modules/pysc2 { }; + pyscard = callPackage ../development/python-modules/pyscard { inherit (pkgs.darwin.apple_sdk.frameworks) PCSC; }; pyside = callPackage ../development/python-modules/pyside { };