diff options
author | Domen Kožar <domen@dev.si> | 2015-11-17 11:38:26 +0100 |
---|---|---|
committer | Domen Kožar <domen@dev.si> | 2015-11-21 21:44:12 +0100 |
commit | a2a6f60b5a1253a292d4db88a2b5955648e240c2 (patch) | |
tree | b9ea6c1c741c389fdc7e84ca505b534b2a842af3 /pkgs/development/python-modules/bootstrapped-pip | |
parent | fc2874d02e61cffb0bcc3e24a47349654c5845eb (diff) | |
download | nixlib-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')
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): |