summary refs log tree commit diff
path: root/pkgs/development/python-modules/bootstrapped-pip
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2015-11-17 11:38:26 +0100
committerDomen Kožar <domen@dev.si>2015-11-21 21:44:12 +0100
commita2a6f60b5a1253a292d4db88a2b5955648e240c2 (patch)
treeb9ea6c1c741c389fdc7e84ca505b534b2a842af3 /pkgs/development/python-modules/bootstrapped-pip
parentfc2874d02e61cffb0bcc3e24a47349654c5845eb (diff)
downloadnixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.tar
nixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.tar.gz
nixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.tar.bz2
nixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.tar.lz
nixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.tar.xz
nixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.tar.zst
nixlib-a2a6f60b5a1253a292d4db88a2b5955648e240c2.zip
WIP: buildPythonPackages now uses wheels internally
Diffstat (limited to 'pkgs/development/python-modules/bootstrapped-pip')
-rw-r--r--pkgs/development/python-modules/bootstrapped-pip/default.nix47
-rw-r--r--pkgs/development/python-modules/bootstrapped-pip/pip-7.0.1-prefix.patch119
-rw-r--r--pkgs/development/python-modules/bootstrapped-pip/prefix.patch115
3 files changed, 281 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/bootstrapped-pip/default.nix b/pkgs/development/python-modules/bootstrapped-pip/default.nix
new file mode 100644
index 000000000000..5578b3a83c4d
--- /dev/null
+++ b/pkgs/development/python-modules/bootstrapped-pip/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, python, fetchurl, makeWrapper, unzip }:
+
+let
+  wheel_source = fetchurl {
+    url = "https://pypi.python.org/packages/py2.py3/w/wheel/wheel-0.26.0-py2.py3-none-any.whl";
+    sha256 = "1sl642ncvipqx0hzypvl5hsiqngy0sib0kq242g4mic7vnid6bn9";
+  };
+  setuptools_source = fetchurl {
+    url = "https://pypi.python.org/packages/3.4/s/setuptools/setuptools-18.2-py2.py3-none-any.whl";
+    sha256 = "0jhafl8wmjc8xigl1ib5hqiq9crmipcz0zcga52riymgqbf2bzh4";
+  };
+in stdenv.mkDerivation rec {
+  name = "python-${python.version}-bootstrapped-pip-${version}";
+  version = "7.1.2";
+
+  src = fetchurl {
+    url = "https://pypi.python.org/packages/py2.py3/p/pip/pip-${version}-py2.py3-none-any.whl";
+    sha256 = "133hx6jaspm6hd02gza66lng37l65yficc2y2x1gh16fbhxrilxr";
+  };
+
+  unpackPhase = ''
+    mkdir -p $out/${python.sitePackages}
+    unzip -d $out/${python.sitePackages} $src
+    unzip -d $out/${python.sitePackages} ${setuptools_source}
+    unzip -d $out/${python.sitePackages} ${wheel_source}
+  '';
+
+  buildInputs = [ python makeWrapper unzip ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    # patch pip to support "pip install --prefix"
+    pushd $out/${python.sitePackages}/
+    patch -p1 < ${./pip-7.0.1-prefix.patch}
+    popd
+
+    # install pip binary
+    echo '${python.interpreter} -m pip "$@"' > $out/bin/pip
+    chmod +x $out/bin/pip
+
+    # wrap binaries with PYTHONPATH
+    for f in $out/bin/*; do
+      wrapProgram $f --prefix PYTHONPATH ":" $out/${python.sitePackages}/
+    done
+  '';
+}
diff --git a/pkgs/development/python-modules/bootstrapped-pip/pip-7.0.1-prefix.patch b/pkgs/development/python-modules/bootstrapped-pip/pip-7.0.1-prefix.patch
new file mode 100644
index 000000000000..1dc7cc5dc3a5
--- /dev/null
+++ b/pkgs/development/python-modules/bootstrapped-pip/pip-7.0.1-prefix.patch
@@ -0,0 +1,119 @@
+commit e87c83d95bb91acdca92202e94488ca51a70e059
+Author: Domen Kožar <domen@dev.si>
+Date:   Mon Nov 16 17:39:44 2015 +0100
+
+    WIP
+
+diff --git a/pip/commands/install.py b/pip/commands/install.py
+index dbcf100..05d5a08 100644
+--- a/pip/commands/install.py
++++ b/pip/commands/install.py
+@@ -139,6 +139,13 @@ class InstallCommand(RequirementCommand):
+                  "directory.")
+ 
+         cmd_opts.add_option(
++            '--prefix',
++            dest='prefix_path',
++            metavar='dir',
++            default=None,
++            help="Installation prefix where lib, bin and other top-level folders are placed")
++
++        cmd_opts.add_option(
+             "--compile",
+             action="store_true",
+             dest="compile",
+@@ -309,6 +316,7 @@ class InstallCommand(RequirementCommand):
+                             install_options,
+                             global_options,
+                             root=options.root_path,
++                            prefix=options.prefix_path,
+                         )
+                         reqs = sorted(
+                             requirement_set.successfully_installed,
+diff --git a/pip/locations.py b/pip/locations.py
+index 4e6f65d..43aeb1f 100644
+--- a/pip/locations.py
++++ b/pip/locations.py
+@@ -163,7 +163,7 @@ site_config_files = [
+ 
+ 
+ def distutils_scheme(dist_name, user=False, home=None, root=None,
+-                     isolated=False):
++                     isolated=False, prefix=None):
+     """
+     Return a distutils install scheme
+     """
+@@ -187,6 +187,8 @@ def distutils_scheme(dist_name, user=False, home=None, root=None,
+     i.user = user or i.user
+     if user:
+         i.prefix = ""
++    else:
++        i.prefix = prefix or i.prefix
+     i.home = home or i.home
+     i.root = root or i.root
+     i.finalize_options()
+diff --git a/pip/req/req_install.py b/pip/req/req_install.py
+index 7c5bf8f..6f80a18 100644
+--- a/pip/req/req_install.py
++++ b/pip/req/req_install.py
+@@ -792,7 +792,7 @@ exec(compile(
+         else:
+             return True
+ 
+-    def install(self, install_options, global_options=[], root=None):
++    def install(self, install_options, global_options=[], root=None, prefix=None):
+         if self.editable:
+             self.install_editable(install_options, global_options)
+             return
+@@ -800,7 +800,7 @@ exec(compile(
+             version = pip.wheel.wheel_version(self.source_dir)
+             pip.wheel.check_compatibility(version, self.name)
+ 
+-            self.move_wheel_files(self.source_dir, root=root)
++            self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
+             self.install_succeeded = True
+             return
+ 
+@@ -833,6 +833,8 @@ exec(compile(
+ 
+             if root is not None:
+                 install_args += ['--root', root]
++            if prefix is not None:
++                install_args += ['--prefix', prefix]
+ 
+             if self.pycompile:
+                 install_args += ["--compile"]
+@@ -988,12 +990,13 @@ exec(compile(
+     def is_wheel(self):
+         return self.link and self.link.is_wheel
+ 
+-    def move_wheel_files(self, wheeldir, root=None):
++    def move_wheel_files(self, wheeldir, root=None, prefix=None):
+         move_wheel_files(
+             self.name, self.req, wheeldir,
+             user=self.use_user_site,
+             home=self.target_dir,
+             root=root,
++            prefix=prefix,
+             pycompile=self.pycompile,
+             isolated=self.isolated,
+         )
+diff --git a/pip/wheel.py b/pip/wheel.py
+index 403f48b..14eb141 100644
+--- a/pip/wheel.py
++++ b/pip/wheel.py
+@@ -234,12 +234,12 @@ def get_entrypoints(filename):
+ 
+ 
+ def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None,
+-                     pycompile=True, scheme=None, isolated=False):
++                     pycompile=True, scheme=None, isolated=False, prefix=None):
+     """Install a wheel"""
+ 
+     if not scheme:
+         scheme = distutils_scheme(
+-            name, user=user, home=home, root=root, isolated=isolated
++            name, user=user, home=home, root=root, isolated=isolated, prefix=prefix,
+         )
+ 
+     if root_is_purelib(name, wheeldir):
diff --git a/pkgs/development/python-modules/bootstrapped-pip/prefix.patch b/pkgs/development/python-modules/bootstrapped-pip/prefix.patch
new file mode 100644
index 000000000000..e3e96659942b
--- /dev/null
+++ b/pkgs/development/python-modules/bootstrapped-pip/prefix.patch
@@ -0,0 +1,115 @@
+diff --git a/pip/commands/install.py b/pip/commands/install.py
+index ddaa470..b798433 100644
+--- a/pip/commands/install.py
++++ b/pip/commands/install.py
+@@ -147,6 +147,13 @@ class InstallCommand(Command):
+                  "directory.")
+ 
+         cmd_opts.add_option(
++            '--prefix',
++            dest='prefix_path',
++            metavar='dir',
++            default=None,
++            help="Installation prefix where lib, bin and other top-level folders are placed")
++
++        cmd_opts.add_option(
+             "--compile",
+             action="store_true",
+             dest="compile",
+@@ -350,6 +357,7 @@ class InstallCommand(Command):
+                             install_options,
+                             global_options,
+                             root=options.root_path,
++                            prefix=options.prefix_path,
+                         )
+                         reqs = sorted(
+                             requirement_set.successfully_installed,
+diff --git a/pip/locations.py b/pip/locations.py
+index dfbc6da..b2f3383 100644
+--- a/pip/locations.py
++++ b/pip/locations.py
+@@ -209,7 +209,7 @@ site_config_files = [
+ 
+ 
+ def distutils_scheme(dist_name, user=False, home=None, root=None,
+-                     isolated=False):
++                     isolated=False, prefix=None):
+     """
+     Return a distutils install scheme
+     """
+@@ -231,6 +231,10 @@ def distutils_scheme(dist_name, user=False, home=None, root=None,
+     # or user base for installations during finalize_options()
+     # ideally, we'd prefer a scheme class that has no side-effects.
+     i.user = user or i.user
++    if user:
++        i.prefix = ""
++    else:
++        i.prefix = prefix or i.prefix
+     i.home = home or i.home
+     i.root = root or i.root
+     i.finalize_options()
+diff --git a/pip/req/req_install.py b/pip/req/req_install.py
+index 38013c5..14b868b 100644
+--- a/pip/req/req_install.py
++++ b/pip/req/req_install.py
+@@ -806,7 +806,7 @@ exec(compile(
+         else:
+             return True
+ 
+-    def install(self, install_options, global_options=(), root=None):
++    def install(self, install_options, global_options=[], root=None, prefix=None):
+         if self.editable:
+             self.install_editable(install_options, global_options)
+             return
+@@ -814,7 +814,7 @@ exec(compile(
+             version = pip.wheel.wheel_version(self.source_dir)
+             pip.wheel.check_compatibility(version, self.name)
+ 
+-            self.move_wheel_files(self.source_dir, root=root)
++            self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
+             self.install_succeeded = True
+             return
+ 
+@@ -839,6 +839,8 @@ exec(compile(
+ 
+             if root is not None:
+                 install_args += ['--root', root]
++            if prefix is not None:
++                install_args += ['--prefix', prefix]
+ 
+             if self.pycompile:
+                 install_args += ["--compile"]
+@@ -1008,12 +1010,13 @@ exec(compile(
+     def is_wheel(self):
+         return self.link and self.link.is_wheel
+ 
+-    def move_wheel_files(self, wheeldir, root=None):
++    def move_wheel_files(self, wheeldir, root=None, prefix=None):
+         move_wheel_files(
+             self.name, self.req, wheeldir,
+             user=self.use_user_site,
+             home=self.target_dir,
+             root=root,
++            prefix=prefix,
+             pycompile=self.pycompile,
+             isolated=self.isolated,
+         )
+diff --git a/pip/wheel.py b/pip/wheel.py
+index 57246ca..738a6b0 100644
+--- a/pip/wheel.py
++++ b/pip/wheel.py
+@@ -130,12 +130,12 @@ def get_entrypoints(filename):
+ 
+ 
+ def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None,
+-                     pycompile=True, scheme=None, isolated=False):
++                     pycompile=True, scheme=None, isolated=False, prefix=None):
+     """Install a wheel"""
+ 
+     if not scheme:
+         scheme = distutils_scheme(
+-            name, user=user, home=home, root=root, isolated=isolated
++            name, user=user, home=home, root=root, isolated=isolated, prefix=prefix,
+         )
+ 
+     if root_is_purelib(name, wheeldir):