working
This commit is contained in:
parent
eee740aff9
commit
b2b92d6c5f
@ -15,9 +15,10 @@
|
|||||||
let
|
let
|
||||||
forAllSystems =
|
forAllSystems =
|
||||||
f: nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (sys: let pkgs = import nixpkgs {system = sys; overlays = [self.overlays.default];}; in f pkgs);
|
f: nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (sys: let pkgs = import nixpkgs {system = sys; overlays = [self.overlays.default];}; in f pkgs);
|
||||||
|
overlayBaseInstance = import ./overlay.nix nixpkgs.outPath;
|
||||||
myOverlay =
|
myOverlay =
|
||||||
pkgs:
|
pkgs:
|
||||||
import ./overlay.nix {
|
overlayBaseInstance {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
oldPkgs = nixpkgs-old.legacyPackages.${pkgs.hostPlatform.system};
|
oldPkgs = nixpkgs-old.legacyPackages.${pkgs.hostPlatform.system};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,11 +1,15 @@
|
|||||||
{stdenv, fetchPypi, python26Packages }: python26Packages.buildPythonPackage rec {
|
{stdenv, fetchPypi, buildPythonPackage, bootstrapped-pip, setuptools }: buildPythonPackage rec {
|
||||||
pname = "importlib";
|
pname = "importlib";
|
||||||
version = "1.0.2";
|
version = "1.0.2";
|
||||||
pyproject = true;
|
format = "other";
|
||||||
|
|
||||||
src = fetchPypi {
|
src = fetchPypi {
|
||||||
inherit pname version;
|
inherit pname version;
|
||||||
extension = "tar.gz";
|
extension = "tar.gz";
|
||||||
hash = "sha256-JNCWaqdoWbKISFgD8xAHZRL4c3fmya/pwoxSqMzdMow=";
|
hash = "sha256-JNCWaqdoWbKISFgD8xAHZRL4c3fmya/pwoxSqMzdMow=";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [bootstrapped-pip setuptools];
|
||||||
|
|
||||||
|
pythonImportsCheck = [];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{stdenv, fetchPypi, buildPythonPackage, setuptools }: buildPythonPackage rec {
|
{stdenv, fetchPypi, buildPythonPackage, setuptools, argparse }: buildPythonPackage rec {
|
||||||
pname = "Jinja2";
|
pname = "Jinja2";
|
||||||
version = "2.5.2";
|
version = "2.5.2";
|
||||||
format = "setuptools";
|
format = "setuptools";
|
||||||
@ -10,7 +10,7 @@
|
|||||||
hash = "sha256-GQQPAbOp2MY+TVeTb3hxCQgZm2k3CrRKD3QH3YkfAZs=";
|
hash = "sha256-GQQPAbOp2MY+TVeTb3hxCQgZm2k3CrRKD3QH3YkfAZs=";
|
||||||
};
|
};
|
||||||
|
|
||||||
propagatedBuildInputs = [setuptools];
|
propagatedBuildInputs = [setuptools argparse];
|
||||||
|
|
||||||
#dependencies = [importlib];
|
#dependencies = [importlib];
|
||||||
}
|
}
|
||||||
|
|||||||
16
lxml.nix
Normal file
16
lxml.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{stdenv, fetchPypi, buildPythonPackage, setuptools, argparse }: buildPythonPackage rec {
|
||||||
|
pname = "Jinja2";
|
||||||
|
version = "2.5.2";
|
||||||
|
format = "setuptools";
|
||||||
|
#pyproject = true;
|
||||||
|
|
||||||
|
src = fetchPypi {
|
||||||
|
inherit pname version;
|
||||||
|
extension = "tar.gz";
|
||||||
|
hash = "sha256-GQQPAbOp2MY+TVeTb3hxCQgZm2k3CrRKD3QH3YkfAZs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
propagatedBuildInputs = [setuptools argparse];
|
||||||
|
|
||||||
|
#dependencies = [importlib];
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
{ pkgs, oldPkgs }:
|
nixpkgsPath: { pkgs, oldPkgs }:
|
||||||
let
|
let
|
||||||
bommels = pkgs.lib.makeScope pkgs.newScope (self: rec {
|
bommels = pkgs.lib.makeScope pkgs.newScope (self: rec {
|
||||||
# python26 = pkgs.callPackage ./python26/default.nix {
|
# python26 = pkgs.callPackage ./python26/default.nix {
|
||||||
@ -6,14 +6,14 @@ bommels = pkgs.lib.makeScope pkgs.newScope (self: rec {
|
|||||||
# xlibsWrapper = pkgs.xlibsWrapper;
|
# xlibsWrapper = pkgs.xlibsWrapper;
|
||||||
# };
|
# };
|
||||||
|
|
||||||
setuptools = self.callPackage ./setuptools.nix { inherit pythonPackages; };
|
#setuptools = self.callPackage ./setuptools.nix { inherit pythonPackages; };
|
||||||
#wrapPython = pkgs.callPackage ./python26/wrap-python.nix { python = python26; };
|
#wrapPython = pkgs.callPackage ./python26/wrap-python.nix { python = python26; };
|
||||||
#mkPythonDerivation = pkgs.callPackage ./python26/mk-python-derivation.nix { inherit setuptools wrapPython; python = python26; };
|
#mkPythonDerivation = pkgs.callPackage ./python26/mk-python-derivation.nix { inherit setuptools wrapPython; python = python26; };
|
||||||
#bootstrapped-pip = pkgs.callPackage ./python26/bootstrapped-pip.nix { python = python26; };
|
#bootstrapped-pip = pkgs.callPackage ./python26/bootstrapped-pip.nix { python = python26; };
|
||||||
#buildPythonPackage = pkgs.callPackage ./python26/build-python-package.nix { inherit bootstrapped-pip mkPythonDerivation; python = python26; };
|
#buildPythonPackage = pkgs.callPackage ./python26/build-python-package.nix { inherit bootstrapped-pip mkPythonDerivation; python = python26; };
|
||||||
|
|
||||||
#pip = pkgs.callPackage ./pip.nix { inherit python26 buildPythonPackage; };
|
#pip = pkgs.callPackage ./pip.nix { inherit python26 buildPythonPackage; };
|
||||||
pythonInterpreters = self.callPackage ./python-interpreters.nix {};
|
pythonInterpreters = self.callPackage ./python-interpreters.nix { inherit nixpkgsPath;};
|
||||||
inherit (pythonInterpreters) python26;
|
inherit (pythonInterpreters) python26;
|
||||||
python26Packages = python26.pkgs;
|
python26Packages = python26.pkgs;
|
||||||
pythonPackages = python26Packages;
|
pythonPackages = python26Packages;
|
||||||
|
|||||||
@ -18,7 +18,7 @@ pythonImportsCheckPhase() {
|
|||||||
# Python modules and namespaces names are Python identifiers, which must not contain spaces.
|
# Python modules and namespaces names are Python identifiers, which must not contain spaces.
|
||||||
# See https://docs.python.org/3/reference/lexical_analysis.html
|
# See https://docs.python.org/3/reference/lexical_analysis.html
|
||||||
# shellcheck disable=SC2048,SC2086
|
# shellcheck disable=SC2048,SC2086
|
||||||
(cd "$pythonImportsCheckOutput" && @pythonCheckInterpreter@ -c 'import sys; import importlib; list(map(lambda mod: importlib.import_module(mod), sys.argv[1:]))' ${pythonImportsCheck[*]})
|
(cd "$pythonImportsCheckOutput" && @pythonCheckInterpreter@ -c 'import sys; import imp; importlib = imp.load_source("importlib", "@importlib@"); list(map(lambda mod: importlib.import_module(mod), sys.argv[1:]))' ${pythonImportsCheck[*]})
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
nixpkgsPath,
|
||||||
__splicedPackages,
|
__splicedPackages,
|
||||||
callPackage,
|
callPackage,
|
||||||
fetchzip,
|
fetchzip,
|
||||||
@ -8,15 +9,14 @@
|
|||||||
makeScopeWithSplicing',
|
makeScopeWithSplicing',
|
||||||
pythonPackagesExtensions,
|
pythonPackagesExtensions,
|
||||||
stdenv,
|
stdenv,
|
||||||
path
|
|
||||||
}@args:
|
}@args:
|
||||||
|
|
||||||
(
|
(
|
||||||
let
|
let
|
||||||
pythonBase = path + "/pkgs/development/interpreters/python";
|
pythonBase = nixpkgsPath + "/pkgs/development/interpreters/python";
|
||||||
|
|
||||||
# Common passthru for all Python interpreters.
|
# Common passthru for all Python interpreters.
|
||||||
passthruFun = import ( pythonBase + "/passthrufun.nix") args;
|
passthruFun = import ./python26/passthrufun.nix (args // { inherit pythonBase; });
|
||||||
fixupString = s: lib.replaceString "2.7" "2.6" (lib.replaceString "2.7.1" "2.6.9" s);
|
fixupString = s: lib.replaceString "2.7" "2.6" (lib.replaceString "2.7.1" "2.6.9" s);
|
||||||
|
|
||||||
pythonRaw = ((callPackage "${pythonBase}/cpython/2.7" {
|
pythonRaw = ((callPackage "${pythonBase}/cpython/2.7" {
|
||||||
|
|||||||
@ -7,10 +7,17 @@ with self;
|
|||||||
with super;
|
with super;
|
||||||
let
|
let
|
||||||
pythonInterpreter = python.pythonOnBuildForHost.interpreter;
|
pythonInterpreter = python.pythonOnBuildForHost.interpreter;
|
||||||
|
pythonCheckInterpreter = python.interpreter;
|
||||||
pythonSitePackages = python.sitePackages;
|
pythonSitePackages = python.sitePackages;
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
bootstrapped-pip = toPythonModule (callPackage ./python26/bootstrapped-pip.nix {});
|
bootstrapped-pip = toPythonModule (callPackage ./python26/bootstrapped-pip.nix {});
|
||||||
|
pip = callPackage ./python26/pip.nix {};
|
||||||
|
argparse = callPackage ./python26/argparse.nix {};
|
||||||
|
|
||||||
|
hookOverrides = {
|
||||||
|
inherit pipInstallHook pythonImportsCheckHook;
|
||||||
|
};
|
||||||
|
|
||||||
pipInstallHookMine = callPackage (
|
pipInstallHookMine = callPackage (
|
||||||
{ makePythonHook, pip }:
|
{ makePythonHook, pip }:
|
||||||
@ -28,11 +35,13 @@ rec {
|
|||||||
makePythonHook {
|
makePythonHook {
|
||||||
name = "python-imports-check-hook";
|
name = "python-imports-check-hook";
|
||||||
substitutions = {
|
substitutions = {
|
||||||
inherit pythonInterpreter pythonSitePackages;
|
inherit pythonInterpreter pythonCheckInterpreter pythonSitePackages;
|
||||||
|
importlib = ./python26/importlib.py;
|
||||||
};
|
};
|
||||||
} ./python-imports-check-hook.sh
|
} ./python-imports-check-hook.sh
|
||||||
) { };
|
) { };
|
||||||
pythonImportsCheckHook = pythonImportsCheckHookMine;
|
pythonImportsCheckHook = pythonImportsCheckHookMine;
|
||||||
|
importlib = callPackage ./importlib.nix {};
|
||||||
|
|
||||||
setuptools = toPythonModule (callPackage ./setuptools.nix { });
|
setuptools = toPythonModule (callPackage ./setuptools.nix { });
|
||||||
wheel = callPackage ./python26/wheel.nix { };
|
wheel = callPackage ./python26/wheel.nix { };
|
||||||
|
|||||||
46
python26/argparse.nix
Normal file
46
python26/argparse.nix
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{ lib
|
||||||
|
, buildPythonPackage
|
||||||
|
, fetchPypi
|
||||||
|
, jsonschema
|
||||||
|
, bootstrapped-pip
|
||||||
|
, setuptools
|
||||||
|
, fetchFromGitHub
|
||||||
|
, breakpointHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "argparse";
|
||||||
|
version = "1.4.0";
|
||||||
|
format = "other";
|
||||||
|
|
||||||
|
#src = fetchPypi {
|
||||||
|
# inherit pname version;
|
||||||
|
# sha256 = "1ebb8ad7e26b448e9caa4773d2357849bf80ff9e313964bcaf79cbf0201a1648";
|
||||||
|
#};
|
||||||
|
src= fetchFromGitHub {
|
||||||
|
inherit pname version;
|
||||||
|
owner="ThomasWaldmann";
|
||||||
|
repo ="argparse";
|
||||||
|
tag = "r140";
|
||||||
|
hash = "sha256-L0cJ44aO3Wd2P/8vykJlOEZu7W2AsNCcAaGDeHtn6b0=";
|
||||||
|
};
|
||||||
|
|
||||||
|
#buildInputs = [ pytest pytestcov coverage ];
|
||||||
|
nativeBuildInputs = [ bootstrapped-pip setuptools breakpointHook];
|
||||||
|
|
||||||
|
catchConflicts = false;
|
||||||
|
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
#pythonImportsCheck = [ "wheel" ];
|
||||||
|
|
||||||
|
# We add this flag to ignore the copy installed by bootstrapped-pip
|
||||||
|
pipInstallFlags = [ "--ignore-installed" ];
|
||||||
|
#pipInstallFlags = ["--upgrade wheel"];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "A built-package format for Python";
|
||||||
|
license = with lib.licenses; [ mit ];
|
||||||
|
homepage = "https://bitbucket.org/pypa/wheel/";
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,56 +1,118 @@
|
|||||||
{ lib, stdenv, python, fetchurl, makeWrapper, unzip }:
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
fetchFromGitHub,
|
||||||
|
python,
|
||||||
|
makeWrapper,
|
||||||
|
unzip,
|
||||||
|
pipInstallHookMine,
|
||||||
|
setuptoolsBuildHook,
|
||||||
|
wheel,
|
||||||
|
pip,
|
||||||
|
setuptools,
|
||||||
|
breakpointHook
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
wheel_source = fetchurl {
|
pipBootstrap = (fetchurl {
|
||||||
url = "https://pypi.python.org/packages/py2.py3/w/wheel/wheel-0.29.0-py2.py3-none-any.whl";
|
|
||||||
sha256 = "ea8033fc9905804e652f75474d33410a07404c1a78dd3c949a66863bd1050ebd";
|
|
||||||
};
|
|
||||||
setuptools_source = fetchurl {
|
|
||||||
url = "https://files.pythonhosted.org/packages/b8/cb/b919f52dd81b4b2210d0c5529b6b629a4002e08d49a90183605d1181b10c/setuptools-30.2.0-py2.py3-none-any.whl";
|
|
||||||
sha256 = "b7e7b28d6a728ea38953d66e12ef400c3c153c523539f1b3997c5a42f3770ff1";
|
|
||||||
};
|
|
||||||
argparse_source = fetchurl {
|
|
||||||
url = "https://pypi.python.org/packages/2.7/a/argparse/argparse-1.4.0-py2.py3-none-any.whl";
|
|
||||||
sha256 = "0533cr5w14da8wdb2q4py6aizvbvsdbk3sj7m1jx9lwznvnlf5n3";
|
|
||||||
};
|
|
||||||
in stdenv.mkDerivation rec {
|
|
||||||
name = "${python.libPrefix}-bootstrapped-pip-${version}";
|
|
||||||
version = "9.0.1";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://files.pythonhosted.org/packages/b6/ac/7015eb97dc749283ffdec1c3a88ddb8ae03b8fad0f0e611408f196358da3/pip-9.0.1-py2.py3-none-any.whl";
|
url = "https://files.pythonhosted.org/packages/b6/ac/7015eb97dc749283ffdec1c3a88ddb8ae03b8fad0f0e611408f196358da3/pip-9.0.1-py2.py3-none-any.whl";
|
||||||
sha256 = "690b762c0a8460c303c089d5d0be034fb15a5ea2b75bdf565f40421f542fefb0";
|
sha256 = "690b762c0a8460c303c089d5d0be034fb15a5ea2b75bdf565f40421f542fefb0";
|
||||||
|
});
|
||||||
|
argparse = fetchFromGitHub {
|
||||||
|
pname = "argparse";
|
||||||
|
version = "1.4.0";
|
||||||
|
owner="ThomasWaldmann";
|
||||||
|
repo ="argparse";
|
||||||
|
tag = "r140";
|
||||||
|
hash = "sha256-L0cJ44aO3Wd2P/8vykJlOEZu7W2AsNCcAaGDeHtn6b0=";
|
||||||
};
|
};
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "pip";
|
||||||
|
inherit (pip) version;
|
||||||
|
name = "${python.libPrefix}-bootstrapped-${pname}-${version}";
|
||||||
|
|
||||||
unpackPhase = ''
|
srcs = [
|
||||||
mkdir -p $out/${python.sitePackages}
|
wheel.src
|
||||||
unzip -d $out/${python.sitePackages} $src
|
pip.src
|
||||||
unzip -d $out/${python.sitePackages} ${setuptools_source}
|
setuptools.src
|
||||||
unzip -d $out/${python.sitePackages} ${wheel_source}
|
argparse
|
||||||
'' + lib.optionalString (python.isPy26 or true) ''
|
|
||||||
unzip -d $out/${python.sitePackages} ${argparse_source}
|
|
||||||
'';
|
|
||||||
|
|
||||||
|
];
|
||||||
|
sourceRoot = ".";
|
||||||
|
|
||||||
patchPhase = ''
|
dontUseSetuptoolsBuild = true;
|
||||||
|
dontUsePipInstall = true;
|
||||||
|
|
||||||
|
# Should be propagatedNativeBuildInputs
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
# Override to remove dependencies to prevent infinite recursion.
|
||||||
|
(pipInstallHookMine.override { pip = null; })
|
||||||
|
(setuptoolsBuildHook.override {
|
||||||
|
setuptools = null;
|
||||||
|
wheel = null;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
'';
|
'';
|
||||||
|
|
||||||
buildInputs = [ python makeWrapper unzip ];
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
unzip
|
||||||
|
breakpointHook
|
||||||
|
];
|
||||||
|
buildInputs = [ python ];
|
||||||
|
|
||||||
installPhase = ''
|
dontBuild = true;
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
# install pip binary
|
installPhase =
|
||||||
echo '#!${python.interpreter}' > $out/bin/pip
|
lib.optionalString (!stdenv.hostPlatform.isWindows) ''
|
||||||
echo 'import sys;from pip import main' >> $out/bin/pip
|
export SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES=0
|
||||||
echo 'sys.exit(main())' >> $out/bin/pip
|
''
|
||||||
chmod +x $out/bin/pip
|
+ ''
|
||||||
|
echo '#!${python.interpreter}' > hostPip
|
||||||
|
echo 'import sys;from pip import main' >> hostPip
|
||||||
|
echo 'sys.exit(main())' >> hostPip
|
||||||
|
chmod +x hostPip
|
||||||
|
|
||||||
# wrap binaries with PYTHONPATH
|
|
||||||
for f in $out/bin/*; do
|
# Give folders a known name
|
||||||
wrapProgram $f --prefix PYTHONPATH ":" $out/${python.sitePackages}/
|
mv pip* pip
|
||||||
done
|
mv setuptools* setuptools
|
||||||
runHook postInstall
|
mv wheel* wheel
|
||||||
|
mv argparse* argparse
|
||||||
|
# Set up PYTHONPATH:
|
||||||
|
# - pip and setuptools need to be in PYTHONPATH to install setuptools, wheel, and pip.
|
||||||
|
# - $out is where we are installing to and takes precedence, and is where wheel will end so we can install pip.
|
||||||
|
export PYTHONPATH="$out/${python.sitePackages}:$(pwd)/pip/pip:$(pwd)/setuptools:$(pwd)/setuptools/pkg_resources:$PYTHONPATH"
|
||||||
|
|
||||||
|
echo "Building setuptools wheel..."
|
||||||
|
pushd setuptools
|
||||||
|
${python.pythonOnBuildForHost.interpreter} ${pipBootstrap}/pip install --no-index --prefix=$out --ignore-installed --no-dependencies --no-cache .
|
||||||
|
popd
|
||||||
|
|
||||||
|
echo "Building wheel wheel..."
|
||||||
|
pushd wheel
|
||||||
|
${python.pythonOnBuildForHost.interpreter} ${pipBootstrap}/pip install --no-index --prefix=$out --ignore-installed --no-dependencies --no-cache .
|
||||||
|
popd
|
||||||
|
|
||||||
|
echo "Building pip wheel..."
|
||||||
|
pushd pip
|
||||||
|
${python.pythonOnBuildForHost.interpreter} ${pipBootstrap}/pip install --no-index --prefix=$out --ignore-installed --no-dependencies --no-cache .
|
||||||
|
popd
|
||||||
|
|
||||||
|
echo "Building argparse wheel..."
|
||||||
|
pushd argparse
|
||||||
|
${python.pythonOnBuildForHost.interpreter} ${pipBootstrap}/pip install --prefix=$out --no-cache .
|
||||||
|
popd
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Version of pip used for bootstrapping";
|
||||||
|
license = lib.unique (pip.meta.license ++ setuptools.meta.license ++ wheel.meta.license);
|
||||||
|
homepage = pip.meta.homepage;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
38
python26/importlib.py
Normal file
38
python26/importlib.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
"""Backport of importlib.import_module from 3.x."""
|
||||||
|
# While not critical (and in no way guaranteed!), it would be nice to keep this
|
||||||
|
# code compatible with Python 2.3.
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def _resolve_name(name, package, level):
|
||||||
|
"""Return the absolute name of the module to be imported."""
|
||||||
|
if not hasattr(package, 'rindex'):
|
||||||
|
raise ValueError("'package' not set to a string")
|
||||||
|
dot = len(package)
|
||||||
|
for x in xrange(level, 1, -1):
|
||||||
|
try:
|
||||||
|
dot = package.rindex('.', 0, dot)
|
||||||
|
except ValueError:
|
||||||
|
raise ValueError("attempted relative import beyond top-level "
|
||||||
|
"package")
|
||||||
|
return "%s.%s" % (package[:dot], name)
|
||||||
|
|
||||||
|
|
||||||
|
def import_module(name, package=None):
|
||||||
|
"""Import a module.
|
||||||
|
|
||||||
|
The 'package' argument is required when performing a relative import. It
|
||||||
|
specifies the package to use as the anchor point from which to resolve the
|
||||||
|
relative import to an absolute import.
|
||||||
|
|
||||||
|
"""
|
||||||
|
if name.startswith('.'):
|
||||||
|
if not package:
|
||||||
|
raise TypeError("relative imports require the 'package' argument")
|
||||||
|
level = 0
|
||||||
|
for character in name:
|
||||||
|
if character != '.':
|
||||||
|
break
|
||||||
|
level += 1
|
||||||
|
name = _resolve_name(name[level:], package, level)
|
||||||
|
__import__(name)
|
||||||
|
return sys.modules[name]
|
||||||
152
python26/passthrufun.nix
Normal file
152
python26/passthrufun.nix
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
callPackage,
|
||||||
|
pythonPackagesExtensions,
|
||||||
|
config,
|
||||||
|
makeScopeWithSplicing',
|
||||||
|
pythonBase,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
implementation,
|
||||||
|
libPrefix,
|
||||||
|
executable,
|
||||||
|
sourceVersion,
|
||||||
|
pythonVersion,
|
||||||
|
packageOverrides,
|
||||||
|
sitePackages,
|
||||||
|
hasDistutilsCxxPatch,
|
||||||
|
pythonOnBuildForBuild,
|
||||||
|
pythonOnBuildForHost,
|
||||||
|
pythonOnBuildForTarget,
|
||||||
|
pythonOnHostForHost,
|
||||||
|
pythonOnTargetForTarget,
|
||||||
|
pythonAttr ? null,
|
||||||
|
self, # is pythonOnHostForTarget
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
pythonPackages =
|
||||||
|
let
|
||||||
|
ensurePythonModules =
|
||||||
|
items:
|
||||||
|
let
|
||||||
|
exceptions = [
|
||||||
|
stdenv
|
||||||
|
];
|
||||||
|
providesSetupHook = lib.attrByPath [ "provides" "setupHook" ] false;
|
||||||
|
valid =
|
||||||
|
value: pythonPackages.hasPythonModule value || providesSetupHook value || lib.elem value exceptions;
|
||||||
|
func =
|
||||||
|
name: value:
|
||||||
|
if lib.isDerivation value then
|
||||||
|
lib.extendDerivation (
|
||||||
|
valid value
|
||||||
|
|| throw "${name} should use `buildPythonPackage` or `toPythonModule` if it is to be part of the Python packages set."
|
||||||
|
) { } value
|
||||||
|
else
|
||||||
|
value;
|
||||||
|
in
|
||||||
|
lib.mapAttrs func items;
|
||||||
|
in
|
||||||
|
ensurePythonModules (
|
||||||
|
callPackage
|
||||||
|
# Function that when called
|
||||||
|
# - imports python-packages.nix
|
||||||
|
# - adds spliced package sets to the package set
|
||||||
|
# - applies overrides from `packageOverrides` and `pythonPackagesOverlays`.
|
||||||
|
(
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
stdenv,
|
||||||
|
python,
|
||||||
|
overrides,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
pythonPackagesFun = import "${pythonBase}/python-packages-base.nix" {
|
||||||
|
inherit stdenv pkgs lib;
|
||||||
|
python = self;
|
||||||
|
};
|
||||||
|
otherSplices = {
|
||||||
|
selfBuildBuild = pythonOnBuildForBuild.pkgs;
|
||||||
|
selfBuildHost = pythonOnBuildForHost.pkgs;
|
||||||
|
selfBuildTarget = pythonOnBuildForTarget.pkgs;
|
||||||
|
selfHostHost = pythonOnHostForHost.pkgs;
|
||||||
|
selfTargetTarget = pythonOnTargetForTarget.pkgs or { }; # There is no Python TargetTarget.
|
||||||
|
};
|
||||||
|
hooks = self: dontUse: (import "${pythonBase}/hooks/default.nix" self dontUse) // (overrides self dontUse).hookOverrides;
|
||||||
|
keep = self: hooks self { };
|
||||||
|
optionalExtensions = cond: as: lib.optionals cond as;
|
||||||
|
pythonExtension = import "${pythonBase}/../../../top-level/python-packages.nix";
|
||||||
|
python2Extension = import "${pythonBase}/../../../top-level/python2-packages.nix";
|
||||||
|
extensions = lib.composeManyExtensions (
|
||||||
|
[
|
||||||
|
hooks
|
||||||
|
pythonExtension
|
||||||
|
]
|
||||||
|
++ (optionalExtensions (!self.isPy3k) [
|
||||||
|
python2Extension
|
||||||
|
])
|
||||||
|
++ pythonPackagesExtensions
|
||||||
|
++ [
|
||||||
|
overrides
|
||||||
|
]
|
||||||
|
);
|
||||||
|
aliases =
|
||||||
|
self: super:
|
||||||
|
lib.optionalAttrs config.allowAliases (import "${pythonBase}/../../../top-level/python-aliases.nix" lib self super);
|
||||||
|
in
|
||||||
|
makeScopeWithSplicing' {
|
||||||
|
inherit otherSplices keep;
|
||||||
|
f = lib.extends (lib.composeExtensions aliases extensions) pythonPackagesFun;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
overrides = packageOverrides;
|
||||||
|
python = self;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
rec {
|
||||||
|
isPy26 = pythonVersion == "2.6";
|
||||||
|
isPy27 = pythonVersion == "2.7";
|
||||||
|
isPy37 = pythonVersion == "3.7";
|
||||||
|
isPy38 = pythonVersion == "3.8";
|
||||||
|
isPy39 = pythonVersion == "3.9";
|
||||||
|
isPy310 = pythonVersion == "3.10";
|
||||||
|
isPy311 = pythonVersion == "3.11";
|
||||||
|
isPy312 = pythonVersion == "3.12";
|
||||||
|
isPy313 = pythonVersion == "3.13";
|
||||||
|
isPy314 = pythonVersion == "3.14";
|
||||||
|
isPy2 = lib.strings.substring 0 1 pythonVersion == "2";
|
||||||
|
isPy3 = lib.strings.substring 0 1 pythonVersion == "3";
|
||||||
|
isPy3k = isPy3;
|
||||||
|
isPyPy = lib.hasInfix "pypy" interpreter;
|
||||||
|
|
||||||
|
buildEnv = callPackage "${pythonBase}/wrapper.nix" {
|
||||||
|
python = self;
|
||||||
|
inherit (pythonPackages) requiredPythonModules;
|
||||||
|
};
|
||||||
|
withPackages = import "${pythonBase}/with-packages.nix" { inherit buildEnv pythonPackages; };
|
||||||
|
pkgs = pythonPackages;
|
||||||
|
interpreter = "${self}/bin/${executable}";
|
||||||
|
inherit
|
||||||
|
executable
|
||||||
|
implementation
|
||||||
|
libPrefix
|
||||||
|
pythonVersion
|
||||||
|
sitePackages
|
||||||
|
;
|
||||||
|
inherit sourceVersion;
|
||||||
|
pythonAtLeast = lib.versionAtLeast pythonVersion;
|
||||||
|
pythonOlder = lib.versionOlder pythonVersion;
|
||||||
|
inherit hasDistutilsCxxPatch;
|
||||||
|
inherit pythonOnBuildForHost;
|
||||||
|
|
||||||
|
tests = callPackage "${pythonBase}/tests.nix" {
|
||||||
|
python = self;
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit pythonAttr;
|
||||||
|
}
|
||||||
48
python26/pip.nix
Normal file
48
python26/pip.nix
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
bootstrapped-pip,
|
||||||
|
fetchFromGitHub,
|
||||||
|
mock,
|
||||||
|
scripttest,
|
||||||
|
virtualenv,
|
||||||
|
pretend,
|
||||||
|
pytest,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "pip";
|
||||||
|
version = "9.0.1";
|
||||||
|
format = "other";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "pypa";
|
||||||
|
repo = pname;
|
||||||
|
rev = version;
|
||||||
|
hash = "sha256-U9Qy8s6T00khlu1ZVxYZeoMHLOFKp/Fsg+Hu8Yi3OAU=";
|
||||||
|
name = "${pname}-${version}-source";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [ bootstrapped-pip ];
|
||||||
|
|
||||||
|
# pip detects that we already have bootstrapped_pip "installed", so we need
|
||||||
|
# to force it a little.
|
||||||
|
pipInstallFlags = [ "--ignore-installed" ];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
mock
|
||||||
|
scripttest
|
||||||
|
virtualenv
|
||||||
|
pretend
|
||||||
|
pytest
|
||||||
|
];
|
||||||
|
# Pip wants pytest, but tests are not distributed
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "PyPA recommended tool for installing Python packages";
|
||||||
|
license = with lib.licenses; [ mit ];
|
||||||
|
homepage = "https://pip.pypa.io/";
|
||||||
|
priority = 10;
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -2,9 +2,12 @@
|
|||||||
, buildPythonPackage
|
, buildPythonPackage
|
||||||
, fetchPypi
|
, fetchPypi
|
||||||
, jsonschema
|
, jsonschema
|
||||||
|
, argparse
|
||||||
, bootstrapped-pip
|
, bootstrapped-pip
|
||||||
, setuptools
|
, setuptools
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
|
, breakpointHook
|
||||||
|
, python
|
||||||
}:
|
}:
|
||||||
|
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
@ -25,16 +28,22 @@ buildPythonPackage rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#buildInputs = [ pytest pytestcov coverage ];
|
#buildInputs = [ pytest pytestcov coverage ];
|
||||||
nativeBuildInputs = [ bootstrapped-pip setuptools ];
|
propagatedBuildInputs = [ argparse ];
|
||||||
|
nativeBuildInputs = [ bootstrapped-pip setuptools breakpointHook];
|
||||||
|
|
||||||
#catchConflicts = false;
|
catchConflicts = false;
|
||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|
||||||
#pythonImportsCheck = [ "wheel" ];
|
pythonImportsCheck = [ "wheel" ];
|
||||||
|
|
||||||
|
preInstall = ''
|
||||||
|
#export PYTHONPATH=${argparse}/${python.sitePackages}
|
||||||
|
'';
|
||||||
|
|
||||||
# We add this flag to ignore the copy installed by bootstrapped-pip
|
# We add this flag to ignore the copy installed by bootstrapped-pip
|
||||||
pipInstallFlags = [ "--ignore-installed" ];
|
pipInstallFlags = [ "--ignore-installed --no-deps" ];
|
||||||
|
#pipInstallFlags = ["--upgrade wheel"];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "A built-package format for Python";
|
description = "A built-package format for Python";
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user