python37: init at 3.7.0rc1
This commit is contained in:
parent
f799f12fb2
commit
7c9d95fef5
5 changed files with 288 additions and 2 deletions
|
@ -484,7 +484,7 @@ and in this case the `python35` interpreter is automatically used.
|
||||||
|
|
||||||
### Interpreters
|
### Interpreters
|
||||||
|
|
||||||
Versions 2.7, 3.3, 3.4, 3.5 and 3.6 of the CPython interpreter are available as
|
Versions 2.7, 3.4, 3.5, 3.6 and 3.7 of the CPython interpreter are available as
|
||||||
respectively `python27`, `python34`, `python35` and `python36`. The PyPy interpreter
|
respectively `python27`, `python34`, `python35` and `python36`. The PyPy interpreter
|
||||||
is available as `pypy`. The aliases `python2` and `python3` correspond to respectively `python27` and
|
is available as `pypy`. The aliases `python2` and `python3` correspond to respectively `python27` and
|
||||||
`python35`. The default interpreter, `python`, maps to `python2`.
|
`python35`. The default interpreter, `python`, maps to `python2`.
|
||||||
|
@ -533,6 +533,7 @@ sets are
|
||||||
* `pkgs.python34Packages`
|
* `pkgs.python34Packages`
|
||||||
* `pkgs.python35Packages`
|
* `pkgs.python35Packages`
|
||||||
* `pkgs.python36Packages`
|
* `pkgs.python36Packages`
|
||||||
|
* `pkgs.python37Packages`
|
||||||
* `pkgs.pypyPackages`
|
* `pkgs.pypyPackages`
|
||||||
|
|
||||||
and the aliases
|
and the aliases
|
||||||
|
|
178
pkgs/development/interpreters/python/cpython/3.7/default.nix
Normal file
178
pkgs/development/interpreters/python/cpython/3.7/default.nix
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
{ stdenv, fetchurl, fetchpatch
|
||||||
|
, glibc
|
||||||
|
, bzip2
|
||||||
|
, expat
|
||||||
|
, libffi
|
||||||
|
, gdbm
|
||||||
|
, lzma
|
||||||
|
, ncurses
|
||||||
|
, openssl
|
||||||
|
, readline
|
||||||
|
, sqlite
|
||||||
|
, tcl ? null, tk ? null, tix ? null, libX11 ? null, xproto ? null, x11Support ? false
|
||||||
|
, zlib
|
||||||
|
, callPackage
|
||||||
|
, self
|
||||||
|
, CF, configd
|
||||||
|
, python-setup-hook
|
||||||
|
# For the Python package set
|
||||||
|
, pkgs, packageOverrides ? (self: super: {})
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert x11Support -> tcl != null
|
||||||
|
&& tk != null
|
||||||
|
&& xproto != null
|
||||||
|
&& libX11 != null;
|
||||||
|
with stdenv.lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
majorVersion = "3.7";
|
||||||
|
minorVersion = "0";
|
||||||
|
minorVersionSuffix = "rc1";
|
||||||
|
pythonVersion = majorVersion;
|
||||||
|
version = "${majorVersion}.${minorVersion}${minorVersionSuffix}";
|
||||||
|
libPrefix = "python${majorVersion}";
|
||||||
|
sitePackages = "lib/${libPrefix}/site-packages";
|
||||||
|
|
||||||
|
buildInputs = filter (p: p != null) [
|
||||||
|
zlib bzip2 expat lzma libffi gdbm sqlite readline ncurses openssl ]
|
||||||
|
++ optionals x11Support [ tcl tk libX11 xproto ]
|
||||||
|
++ optionals stdenv.isDarwin [ CF configd ];
|
||||||
|
|
||||||
|
in stdenv.mkDerivation {
|
||||||
|
name = "python3-${version}";
|
||||||
|
pythonVersion = majorVersion;
|
||||||
|
inherit majorVersion version;
|
||||||
|
|
||||||
|
inherit buildInputs;
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://www.python.org/ftp/python/${majorVersion}.${minorVersion}/Python-${version}.tar.xz";
|
||||||
|
sha256 = "1dqb1in7xlvq7959pvvxpm50nz5jk7ifxza2x4hfvqr31jvbkky9";
|
||||||
|
};
|
||||||
|
|
||||||
|
NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s";
|
||||||
|
|
||||||
|
# Determinism: We fix the hashes of str, bytes and datetime objects.
|
||||||
|
PYTHONHASHSEED=0;
|
||||||
|
|
||||||
|
prePatch = optionalString stdenv.isDarwin ''
|
||||||
|
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
||||||
|
substituteInPlace configure --replace '-Wl,-stack_size,1000000' ' '
|
||||||
|
'';
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./no-ldconfig.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
'' + optionalString (x11Support && (tix != null)) ''
|
||||||
|
substituteInPlace "Lib/tkinter/tix.py" --replace "os.environ.get('TIX_LIBRARY')" "os.environ.get('TIX_LIBRARY') or '${tix}/lib'"
|
||||||
|
'';
|
||||||
|
|
||||||
|
CPPFLAGS="${concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs)}";
|
||||||
|
LDFLAGS="${concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs)}";
|
||||||
|
LIBS="${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}";
|
||||||
|
|
||||||
|
configureFlags = [
|
||||||
|
"--enable-shared"
|
||||||
|
"--with-threads"
|
||||||
|
"--without-ensurepip"
|
||||||
|
"--with-system-expat"
|
||||||
|
"--with-system-ffi"
|
||||||
|
];
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
for i in /usr /sw /opt /pkg; do # improve purity
|
||||||
|
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||||
|
done
|
||||||
|
${optionalString stdenv.isDarwin ''
|
||||||
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -msse2"
|
||||||
|
export MACOSX_DEPLOYMENT_TARGET=10.6
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
setupHook = python-setup-hook sitePackages;
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
# needed for some packages, especially packages that backport functionality
|
||||||
|
# to 2.x from 3.x
|
||||||
|
for item in $out/lib/python${majorVersion}/test/*; do
|
||||||
|
if [[ "$item" != */test_support.py*
|
||||||
|
&& "$item" != */test/support
|
||||||
|
&& "$item" != */test/libregrtest
|
||||||
|
&& "$item" != */test/regrtest.py* ]]; then
|
||||||
|
rm -rf "$item"
|
||||||
|
else
|
||||||
|
echo $item
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||||
|
|
||||||
|
ln -s "$out/include/python${majorVersion}m" "$out/include/python${majorVersion}"
|
||||||
|
paxmark E $out/bin/python${majorVersion}
|
||||||
|
|
||||||
|
# Python on Nix is not manylinux1 compatible. https://github.com/NixOS/nixpkgs/issues/18484
|
||||||
|
echo "manylinux1_compatible=False" >> $out/lib/${libPrefix}/_manylinux.py
|
||||||
|
|
||||||
|
# Determinism: Windows installers were not deterministic.
|
||||||
|
# We're also not interested in building Windows installers.
|
||||||
|
find "$out" -name 'wininst*.exe' | xargs -r rm -f
|
||||||
|
|
||||||
|
# Use Python3 as default python
|
||||||
|
ln -s "$out/bin/idle3" "$out/bin/idle"
|
||||||
|
ln -s "$out/bin/pydoc3" "$out/bin/pydoc"
|
||||||
|
ln -s "$out/bin/python3" "$out/bin/python"
|
||||||
|
ln -s "$out/bin/python3-config" "$out/bin/python-config"
|
||||||
|
ln -s "$out/lib/pkgconfig/python3.pc" "$out/lib/pkgconfig/python.pc"
|
||||||
|
|
||||||
|
# Get rid of retained dependencies on -dev packages, and remove
|
||||||
|
# some $TMPDIR references to improve binary reproducibility.
|
||||||
|
# Note that the .pyc file of _sysconfigdata.py should be regenerated!
|
||||||
|
for i in $out/lib/python${majorVersion}/_sysconfigdata*.py $out/lib/python${majorVersion}/config-${majorVersion}m*/Makefile; do
|
||||||
|
sed -i $i -e "s|-I/nix/store/[^ ']*||g" -e "s|-L/nix/store/[^ ']*||g" -e "s|$TMPDIR|/no-such-path|g"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Determinism: rebuild all bytecode
|
||||||
|
# We exclude lib2to3 because that's Python 2 code which fails
|
||||||
|
# We rebuild three times, once for each optimization level
|
||||||
|
# Python 3.7 implements PEP 552, introducing support for deterministic bytecode.
|
||||||
|
# This is automatically used when `SOURCE_DATE_EPOCH` is set.
|
||||||
|
find $out -name "*.py" | $out/bin/python -m compileall -q -f -x "lib2to3" -i -
|
||||||
|
find $out -name "*.py" | $out/bin/python -O -m compileall -q -f -x "lib2to3" -i -
|
||||||
|
find $out -name "*.py" | $out/bin/python -OO -m compileall -q -f -x "lib2to3" -i -
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = let
|
||||||
|
pythonPackages = callPackage ../../../../../top-level/python-packages.nix {python=self; overrides=packageOverrides;};
|
||||||
|
in rec {
|
||||||
|
inherit libPrefix sitePackages x11Support;
|
||||||
|
executable = "${libPrefix}m";
|
||||||
|
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
|
||||||
|
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
|
||||||
|
pkgs = pythonPackages;
|
||||||
|
isPy3 = true;
|
||||||
|
isPy37 = true;
|
||||||
|
is_py3k = true; # deprecated
|
||||||
|
interpreter = "${self}/bin/${executable}";
|
||||||
|
};
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = http://python.org;
|
||||||
|
description = "A high-level dynamically-typed programming language";
|
||||||
|
longDescription = ''
|
||||||
|
Python is a remarkably powerful dynamic programming language that
|
||||||
|
is used in a wide variety of application domains. Some of its key
|
||||||
|
distinguishing features include: clear, readable syntax; strong
|
||||||
|
introspection capabilities; intuitive object orientation; natural
|
||||||
|
expression of procedural code; full modularity, supporting
|
||||||
|
hierarchical packages; exception-based error handling; and very
|
||||||
|
high level dynamic data types.
|
||||||
|
'';
|
||||||
|
license = licenses.psfl;
|
||||||
|
platforms = with platforms; linux ++ darwin;
|
||||||
|
maintainers = with maintainers; [ fridh kragniz ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
From 597e73f2a4b2f0b508127931b36d5540d6941823 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Frederik Rietdijk <fridh@fridh.nl>
|
||||||
|
Date: Mon, 28 Aug 2017 09:24:06 +0200
|
||||||
|
Subject: [PATCH] Don't use ldconfig
|
||||||
|
|
||||||
|
---
|
||||||
|
Lib/ctypes/util.py | 70 ++----------------------------------------------------
|
||||||
|
1 file changed, 2 insertions(+), 68 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
||||||
|
index 5e8b31a854..7b45ce6c15 100644
|
||||||
|
--- a/Lib/ctypes/util.py
|
||||||
|
+++ b/Lib/ctypes/util.py
|
||||||
|
@@ -94,46 +94,7 @@ elif os.name == "posix":
|
||||||
|
import re, tempfile
|
||||||
|
|
||||||
|
def _findLib_gcc(name):
|
||||||
|
- # Run GCC's linker with the -t (aka --trace) option and examine the
|
||||||
|
- # library name it prints out. The GCC command will fail because we
|
||||||
|
- # haven't supplied a proper program with main(), but that does not
|
||||||
|
- # matter.
|
||||||
|
- expr = os.fsencode(r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name))
|
||||||
|
-
|
||||||
|
- c_compiler = shutil.which('gcc')
|
||||||
|
- if not c_compiler:
|
||||||
|
- c_compiler = shutil.which('cc')
|
||||||
|
- if not c_compiler:
|
||||||
|
- # No C compiler available, give up
|
||||||
|
- return None
|
||||||
|
-
|
||||||
|
- temp = tempfile.NamedTemporaryFile()
|
||||||
|
- try:
|
||||||
|
- args = [c_compiler, '-Wl,-t', '-o', temp.name, '-l' + name]
|
||||||
|
-
|
||||||
|
- env = dict(os.environ)
|
||||||
|
- env['LC_ALL'] = 'C'
|
||||||
|
- env['LANG'] = 'C'
|
||||||
|
- try:
|
||||||
|
- proc = subprocess.Popen(args,
|
||||||
|
- stdout=subprocess.PIPE,
|
||||||
|
- stderr=subprocess.STDOUT,
|
||||||
|
- env=env)
|
||||||
|
- except OSError: # E.g. bad executable
|
||||||
|
- return None
|
||||||
|
- with proc:
|
||||||
|
- trace = proc.stdout.read()
|
||||||
|
- finally:
|
||||||
|
- try:
|
||||||
|
- temp.close()
|
||||||
|
- except FileNotFoundError:
|
||||||
|
- # Raised if the file was already removed, which is the normal
|
||||||
|
- # behaviour of GCC if linking fails
|
||||||
|
- pass
|
||||||
|
- res = re.search(expr, trace)
|
||||||
|
- if not res:
|
||||||
|
- return None
|
||||||
|
- return os.fsdecode(res.group(0))
|
||||||
|
+ return None
|
||||||
|
|
||||||
|
|
||||||
|
if sys.platform == "sunos5":
|
||||||
|
@@ -255,34 +216,7 @@ elif os.name == "posix":
|
||||||
|
else:
|
||||||
|
|
||||||
|
def _findSoname_ldconfig(name):
|
||||||
|
- import struct
|
||||||
|
- if struct.calcsize('l') == 4:
|
||||||
|
- machine = os.uname().machine + '-32'
|
||||||
|
- else:
|
||||||
|
- machine = os.uname().machine + '-64'
|
||||||
|
- mach_map = {
|
||||||
|
- 'x86_64-64': 'libc6,x86-64',
|
||||||
|
- 'ppc64-64': 'libc6,64bit',
|
||||||
|
- 'sparc64-64': 'libc6,64bit',
|
||||||
|
- 's390x-64': 'libc6,64bit',
|
||||||
|
- 'ia64-64': 'libc6,IA-64',
|
||||||
|
- }
|
||||||
|
- abi_type = mach_map.get(machine, 'libc6')
|
||||||
|
-
|
||||||
|
- # XXX assuming GLIBC's ldconfig (with option -p)
|
||||||
|
- regex = r'\s+(lib%s\.[^\s]+)\s+\(%s'
|
||||||
|
- regex = os.fsencode(regex % (re.escape(name), abi_type))
|
||||||
|
- try:
|
||||||
|
- with subprocess.Popen(['/sbin/ldconfig', '-p'],
|
||||||
|
- stdin=subprocess.DEVNULL,
|
||||||
|
- stderr=subprocess.DEVNULL,
|
||||||
|
- stdout=subprocess.PIPE,
|
||||||
|
- env={'LC_ALL': 'C', 'LANG': 'C'}) as p:
|
||||||
|
- res = re.search(regex, p.stdout.read())
|
||||||
|
- if res:
|
||||||
|
- return os.fsdecode(res.group(1))
|
||||||
|
- except OSError:
|
||||||
|
- pass
|
||||||
|
+ return None
|
||||||
|
|
||||||
|
def _findLib_ld(name):
|
||||||
|
# See issue #9998 for why this is needed
|
||||||
|
--
|
||||||
|
2.15.0
|
||||||
|
|
|
@ -7412,6 +7412,7 @@ with pkgs;
|
||||||
python34Full = python34.override{x11Support=true;};
|
python34Full = python34.override{x11Support=true;};
|
||||||
python35Full = python35.override{x11Support=true;};
|
python35Full = python35.override{x11Support=true;};
|
||||||
python36Full = python36.override{x11Support=true;};
|
python36Full = python36.override{x11Support=true;};
|
||||||
|
python37Full = python37.override{x11Support=true;};
|
||||||
|
|
||||||
# pythonPackages further below, but assigned here because they need to be in sync
|
# pythonPackages further below, but assigned here because they need to be in sync
|
||||||
pythonPackages = python.pkgs;
|
pythonPackages = python.pkgs;
|
||||||
|
@ -7434,6 +7435,10 @@ with pkgs;
|
||||||
inherit (darwin) CF configd;
|
inherit (darwin) CF configd;
|
||||||
self = python36;
|
self = python36;
|
||||||
};
|
};
|
||||||
|
python37 = callPackage ../development/interpreters/python/cpython/3.7 {
|
||||||
|
inherit (darwin) CF configd;
|
||||||
|
self = python37;
|
||||||
|
};
|
||||||
|
|
||||||
pypy27 = callPackage ../development/interpreters/python/pypy/2.7 {
|
pypy27 = callPackage ../development/interpreters/python/pypy/2.7 {
|
||||||
self = pypy27;
|
self = pypy27;
|
||||||
|
@ -7446,6 +7451,7 @@ with pkgs;
|
||||||
python34Packages = python34.pkgs;
|
python34Packages = python34.pkgs;
|
||||||
python35Packages = python35.pkgs;
|
python35Packages = python35.pkgs;
|
||||||
python36Packages = recurseIntoAttrs python36.pkgs;
|
python36Packages = recurseIntoAttrs python36.pkgs;
|
||||||
|
python37Packages = python37.pkgs;
|
||||||
pypyPackages = pypy.pkgs;
|
pypyPackages = pypy.pkgs;
|
||||||
|
|
||||||
# Should eventually be moved inside Python interpreters.
|
# Should eventually be moved inside Python interpreters.
|
||||||
|
|
|
@ -26,6 +26,7 @@ let
|
||||||
isPy34 = python.pythonVersion == "3.4";
|
isPy34 = python.pythonVersion == "3.4";
|
||||||
isPy35 = python.pythonVersion == "3.5";
|
isPy35 = python.pythonVersion == "3.5";
|
||||||
isPy36 = python.pythonVersion == "3.6";
|
isPy36 = python.pythonVersion == "3.6";
|
||||||
|
isPy37 = python.pythonVersion == "3.7";
|
||||||
isPyPy = python.executable == "pypy";
|
isPyPy = python.executable == "pypy";
|
||||||
isPy3k = strings.substring 0 1 python.pythonVersion == "3";
|
isPy3k = strings.substring 0 1 python.pythonVersion == "3";
|
||||||
|
|
||||||
|
@ -132,7 +133,7 @@ let
|
||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
inherit python bootstrapped-pip pythonAtLeast pythonOlder isPy26 isPy27 isPy33 isPy34 isPy35 isPy36 isPyPy isPy3k buildPythonPackage buildPythonApplication;
|
inherit python bootstrapped-pip pythonAtLeast pythonOlder isPy26 isPy27 isPy33 isPy34 isPy35 isPy36 isPy37 isPyPy isPy3k buildPythonPackage buildPythonApplication;
|
||||||
inherit fetchPypi callPackage;
|
inherit fetchPypi callPackage;
|
||||||
inherit hasPythonModule requiredPythonModules makePythonPath disabledIf;
|
inherit hasPythonModule requiredPythonModules makePythonPath disabledIf;
|
||||||
inherit toPythonModule toPythonApplication;
|
inherit toPythonModule toPythonApplication;
|
||||||
|
|
Loading…
Reference in a new issue