Merge pull request #206 from chaoflow/python-merge

python pureness, cleanup, and enable pth loaders (setuptoolsSite, recursivePthLoader)
This commit is contained in:
cillianderoiste 2012-12-05 14:28:09 -08:00
commit 5b0cd954f1
15 changed files with 408 additions and 156 deletions

View File

@ -17,8 +17,6 @@ stdenv.mkDerivation {
buildInputs = [ python makeWrapper docutils unzip ];
PYTHONPATH = "${python}/lib/python2.6/site-packages:${python}/lib/python2.7/site-packages:${docutils}/lib/python2.5/site-packages:${docutils}/lib/python2.6/site-packages:${docutils}/lib/python2.7/site-packages";
makeFlags = "PREFIX=$(out)";
postInstall = (stdenv.lib.optionalString guiSupport
@ -47,8 +45,6 @@ stdenv.mkDerivation {
chmod u+x $out/share/cgi-bin/hgweb.cgi
'';
doCheck = false; # The test suite fails, unfortunately. Not sure why.
meta = {
description = "A fast, lightweight SCM system for very large distributed projects";
homepage = "http://www.selenic.com/mercurial/";

View File

@ -60,6 +60,8 @@ let
postInstall =
''
rm -rf "$out/lib/python${majorVersion}/test"
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
'';
passthru = {

View File

@ -74,6 +74,8 @@ let
postInstall =
''
rm -rf "$out/lib/python${majorVersion}/test"
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
'';
passthru = {

View File

@ -11,7 +11,7 @@ stdenv.mkDerivation {
unpackPhase = "true";
installPhase = ''
mkdir -p "$out/bin"
for prg in 2to3 idle pydoc python python-config python${python.majorVersion} python${python.majorVersion}-config smtpd.py; do
for prg in 2to3 idle pdb pdb${python.majorVersion} pydoc python python-config python${python.majorVersion} python${python.majorVersion}-config smtpd.py; do
makeWrapper "$python/bin/$prg" "$out/bin/$prg" --suffix PYTHONPATH : "$PYTHONPATH"
done
ensureDir "$out/share"

View File

@ -3,12 +3,14 @@
(http://pypi.python.org/pypi/setuptools/), which represents a large
number of Python packages nowadays. */
{ python, setuptools, wrapPython, lib }:
{ python, setuptools, wrapPython, lib, offlineDistutils, setuptoolsSite }:
{ name, namePrefix ? "python-"
, buildInputs ? []
, propagatedBuildInputs ? []
, # List of packages that should be added to the PYTHONPATH
# environment variable in programs built by this function. Packages
# in the standard `propagatedBuildInputs' variable are also added.
@ -19,9 +21,11 @@
, installCommand ?
''
easy_install --prefix="$out" .
easy_install --always-unzip --prefix="$out" .
''
, preConfigure ? "true"
, buildPhase ? "true"
, doCheck ? true
@ -43,12 +47,22 @@ python.stdenv.mkDerivation (attrs // {
name = namePrefix + name;
phases = "unpackPhase patchPhase configurePhase buildPhase installPhase checkPhase fixupPhase distPhase";
buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath;
# setuptoolsSite is responsible for loading pth files
propagatedBuildInputs = propagatedBuildInputs ++ [ setuptoolsSite ];
buildInputStrings = map toString buildInputs;
pythonPath = [ setuptools] ++ pythonPath;
# XXX: Should we run `easy_install --always-unzip'? It doesn't seem
# to have a noticeable impact on small scripts.
preConfigure = ''
PYTHONPATH="${offlineDistutils}/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
${preConfigure}
'';
installPhase = ''
mkdir -p "$out/lib/${python.libPrefix}/site-packages"
@ -56,13 +70,27 @@ python.stdenv.mkDerivation (attrs // {
export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
${installCommand}
# A pth file might have been generated to load the package from
# within its own site-packages, rename this package not to
# collide with others.
eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth
if [ -e "$eapth" ]; then
# move colliding easy_install.pth to specifically named one
mv "$eapth" $(dirname "$eapth")/${name}.pth
fi
# Remove any site.py files generated by easy_install as these
# cause collisions. If pth files are to be processed a
# corresponding site.py needs to be included in the PYTHONPATH.
rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
${postInstall}
'';
postFixup =
''
wrapPythonPrograms
# If a user installs a Python package, she probably also wants its
# dependencies in the user environment (since Python modules don't
# have something like an RPATH, so the only way to find the
@ -70,5 +98,12 @@ python.stdenv.mkDerivation (attrs // {
if test -e $out/nix-support/propagated-build-inputs; then
ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
fi
createBuildInputsPth build-inputs "$buildInputStrings"
for inputsfile in propagated-build-inputs propagated-build-native-inputs; do
if test -e $out/nix-support/$inputsfile; then
createBuildInputsPth $inputsfile "$(cat $out/nix-support/$inputsfile)"
fi
done
'';
})

View File

@ -45,3 +45,16 @@ _addToPythonPath() {
done
fi
}
createBuildInputsPth() {
local category="$1"
local inputs="$2"
if [ foo"$inputs" != foo ]; then
for x in $inputs; do
if test -d "$x"/lib/@libPrefix@/site-packages; then
echo $x/lib/@libPrefix@/site-packages \
>> "$out"/lib/@libPrefix@/site-packages/${name}-nix-python-$category.pth
fi
done
fi
}

View File

@ -0,0 +1,21 @@
# Used during module installation to prevent easy_install and python
# setup.py install/test from downloading
{ stdenv, python }:
stdenv.mkDerivation {
name = "python-offline-distutils-${python.version}";
buildInputs = [ python ];
unpackPhase = "true";
installPhase = ''
dst="$out/lib/${python.libPrefix}"
ensureDir $dst/distutils
ln -s ${python}/lib/${python.libPrefix}/distutils/* $dst/distutils/
cat <<EOF > $dst/distutils/distutils.cfg
[easy_install]
allow-hosts = None
EOF
'';
}

View File

@ -1,9 +1,9 @@
{ fetchurl, stdenv, python, libjpeg, zlib, freetype }:
{ fetchurl, stdenv, python, buildPythonPackage, libjpeg, zlib, freetype }:
let version = "1.1.7"; in
stdenv.mkDerivation {
name = "python-imaging-${version}";
buildPythonPackage {
name = "imaging-${version}";
src = fetchurl {
url = "http://effbot.org/downloads/Imaging-${version}.tar.gz";
@ -23,7 +23,7 @@ stdenv.mkDerivation {
buildPhase = "python setup.py build_ext -i";
checkPhase = "python selftest.py";
installPhase = "python setup.py install --prefix=$out";
#installPhase = "python setup.py install --prefix=$out";
meta = {
homepage = http://www.pythonware.com/products/pil/;

View File

@ -1,7 +1,8 @@
{ stdenv, fetchurl, python, gmp }:
{ stdenv, fetchurl, python, buildPythonPackage, gmp }:
stdenv.mkDerivation rec {
buildPythonPackage rec {
name = "pycrypto-2.6";
namePrefix = "";
src = fetchurl {
url = "http://pypi.python.org/packages/source/p/pycrypto/${name}.tar.gz";
@ -10,14 +11,16 @@ stdenv.mkDerivation rec {
buildInputs = [ python gmp ];
buildPhase = "true";
installPhase =
buildPhase =
''
python ./setup.py build_ext --library-dirs=${gmp}/lib
python ./setup.py install --prefix=$out
'';
# installPhase =
# ''
# python ./setup.py install --prefix=$out
# '';
meta = {
homepage = "http://www.pycrypto.org/";
description = "Python Cryptography Toolkit";

View File

@ -0,0 +1,20 @@
{ stdenv, python }:
stdenv.mkDerivation rec {
name = "resursive-pth-loader-1.0";
unpackPhase = "true";
buildInputs = [ python ];
installPhase =
''
dst=$out/lib/${python.libPrefix}/site-packages
mkdir -p $dst
cat ${./sitecustomize.py} >> $dst/sitecustomize.py
'';
meta = {
description = "Enable recursive processing of pth files anywhere in sys.path";
};
}

View File

@ -0,0 +1,46 @@
"""Recursively load pth files in site-packages of sys.path
- iterate over sys.path
- check for pth in dirs that end in site-packages
- ignore import statements in pth files
- add dirs listed in pth files right after current sys.path element,
they will be processed in next iteration
"""
import os
import site
import sys
for path_idx, sitedir in enumerate(sys.path):
# ignore non-site-packages
if not sitedir.endswith('site-packages'):
continue
# find pth files
try:
names = os.listdir(sitedir)
except os.error:
continue
dotpth = os.extsep + "pth"
pths = [name for name in names if name.endswith(dotpth)]
for pth in pths:
fullname = os.path.join(sitedir, pth)
try:
f = open(fullname, "rU")
except IOError:
continue
with f:
for n, line in enumerate(f):
if line.startswith("#"):
continue
if line.startswith(("import ", "import\t")):
continue
line = line.rstrip()
dir, dircase = site.makepath(sitedir, line)
if not dircase in sys.path:
sys.path.insert(path_idx+1, dir)

View File

@ -1,7 +1,9 @@
{ stdenv, fetchurl, python, wrapPython }:
stdenv.mkDerivation rec {
name = "setuptools-0.6c11";
name = "setuptools-" + version;
version = "0.6c11";
src = fetchurl {
url = "http://pypi.python.org/packages/source/s/setuptools/${name}.tar.gz";

View File

@ -0,0 +1,16 @@
# Propagated by buildPythonPackge to process pth files
{ stdenv, python, setuptools }:
stdenv.mkDerivation {
name = "python-setuptools-site-${setuptools.version}";
buildInputs = [ python setuptools ];
unpackPhase = "true";
installPhase = ''
dst="$out/lib/${python.libPrefix}/site-packages"
ensureDir $dst
ln -s ${setuptools}/lib/${python.libPrefix}/site-packages/site.* $dst/
'';
}

View File

@ -5233,13 +5233,13 @@ let
numeric = callPackage ../development/python-modules/numeric { };
pil = callPackage ../development/python-modules/pil { };
pil = python27Packages.pil;
psyco = callPackage ../development/python-modules/psyco { };
pycairo = callPackage ../development/python-modules/pycairo { };
pycrypto = callPackage ../development/python-modules/pycrypto { };
pycrypto = python27Packages.pycrypto;
pycups = callPackage ../development/python-modules/pycups { };

View File

@ -9,7 +9,13 @@ let pythonPackages = python.modules // rec {
buildPythonPackage = import ../development/python-modules/generic {
inherit (pkgs) lib;
inherit python wrapPython setuptools;
inherit python wrapPython setuptools setuptoolsSite offlineDistutils;
};
recursivePthLoader = import ../development/python-modules/recursive-pth-loader {
inherit (pkgs) stdenv;
inherit python;
};
@ -18,12 +24,30 @@ let pythonPackages = python.modules // rec {
inherit python wrapPython;
};
setuptoolsSite = import ../development/python-modules/setuptools/site.nix {
inherit (pkgs) stdenv;
inherit python setuptools;
};
offlineDistutils = import ../development/python-modules/offline-distutils {
inherit (pkgs) stdenv;
inherit python;
};
ipython = import ../shells/ipython {
inherit (pkgs) stdenv fetchurl;
inherit buildPythonPackage pythonPackages;
};
pil = import ../development/python-modules/pil {
inherit (pkgs) fetchurl stdenv libjpeg zlib freetype;
inherit python buildPythonPackage;
};
pycrypto = import ../development/python-modules/pycrypto {
inherit (pkgs) fetchurl stdenv gmp;
inherit python buildPythonPackage;
};
wrapPython = pkgs.makeSetupHook
{ deps = pkgs.makeWrapper;
@ -44,6 +68,7 @@ let pythonPackages = python.modules // rec {
propagatedBuildInputs = [ notmuch pkgs.dbacl ];
# error: invalid command 'test'
doCheck = false;
postInstall = ''
@ -70,6 +95,7 @@ let pythonPackages = python.modules // rec {
sha256 = "b5239c4dfcd9882608fb48ef80fe9ba9223949ab7e6a2c1abe970ac307ebcd4a";
};
# error: invalid command 'test'
doCheck = false;
propagatedBuildInputs = [ notmuch urwid twisted magic configobj pygpgme ];
@ -113,6 +139,7 @@ let pythonPackages = python.modules // rec {
sha1 = "f124e5e4a6644bf6d1734032a01ac44db1b25a29";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -132,6 +159,7 @@ let pythonPackages = python.modules // rec {
buildInputs = [ pkgs.unzip pkgs.sqlite ];
# python: double free or corruption (fasttop): 0x0000000002fd4660 ***
doCheck = false;
meta = {
@ -149,9 +177,14 @@ let pythonPackages = python.modules // rec {
rev = "b2c9cdcabd";
sha256 = "b0c12b8c48ed9180c7475fab18de50d63e1b517cfb46da4d2c66fc406fe902bc";
};
installCommand = "python setup.py install --prefix=$out";
# error: invalid command 'test'
doCheck = false;
propagatedBuildInputs = [ boto ];
});
@ -165,7 +198,7 @@ let pythonPackages = python.modules // rec {
buildInputs = [ pkgs.unzip ];
# How do we run the tests?
# error: invalid command 'test'
doCheck = false;
meta = {
@ -206,7 +239,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1gasiy5lwbhsxw27g36d88n36xbj52434klisvqhljgckd4xqcy7";
};
# No tests implemented
# error: invalid command 'test'
doCheck = false;
meta = {
@ -272,23 +305,23 @@ let pythonPackages = python.modules // rec {
};
bugz = buildPythonPackage (rec {
name = "bugz-0.9.3";
src = fetchgit {
url = "git://github.com/williamh/pybugz.git";
rev = "refs/tags/0.9.3";
};
propagatedBuildInputs = [ argparse python.modules.ssl ];
doCheck = false;
meta = {
homepage = http://www.liquidx.net/pybugz/;
description = "Command line interface for Bugzilla";
};
});
# bugz = buildPythonPackage (rec {
# name = "bugz-0.9.3";
#
# src = fetchgit {
# url = "https://github.com/williamh/pybugz.git";
# rev = "refs/tags/0.9.3";
# };
#
# propagatedBuildInputs = [ argparse python.modules.ssl ];
#
# doCheck = false;
#
# meta = {
# homepage = http://www.liquidx.net/pybugz/;
# description = "Command line interface for Bugzilla";
# };
# });
carrot = buildPythonPackage rec {
@ -338,6 +371,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1xlvanhnxgvwd7vvypbafyl6yqfkpnwa9rs9k3058z84gd86bz8d";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -373,6 +407,8 @@ let pythonPackages = python.modules // rec {
propagatedBuildInputs = [ stompclient distribute ];
#buildInputs = [ coverage ];
# needs coverage
doCheck = false;
meta = {
@ -391,6 +427,7 @@ let pythonPackages = python.modules // rec {
md5 = "201dbaa732a9049c839f9bb6c27fc7b5";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -427,9 +464,9 @@ let pythonPackages = python.modules // rec {
sha256 = "139yfm9yz9k33kgqw4khsljs10rkhhxyywbq9i82bh2r31cil1pp";
};
buildInputs = [ pkgs.unzip ];
buildInputs = [ pkgs.unzip mock ];
# The tests fail - I don't know why
# couple of failing tests
doCheck = false;
meta = {
@ -456,7 +493,7 @@ let pythonPackages = python.modules // rec {
# http://thread.gmane.org/gmane.comp.file-systems.tahoe.devel/3200 for a
# discussion.
# Gives "ValueError: Empty module name" with no clue as to why.
# AttributeError: 'module' object has no attribute 'test_darcsver'
doCheck = false;
meta = {
@ -514,6 +551,8 @@ let pythonPackages = python.modules // rec {
# ehm, YES, the --verbose flags needs to be there, otherwise it tries to patch setuptools!
easy_install --verbose --prefix=$out .
'';
# test for 27 fails
doCheck = false;
meta = {
@ -549,6 +588,7 @@ let pythonPackages = python.modules // rec {
sha256 = "16s0anvpaccbqmdrhl71z73k0dy2sl166nnc2fbd5lshlgmj13ad";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -566,6 +606,7 @@ let pythonPackages = python.modules // rec {
sha256 = "0snlrcvk92qj1v0n9dpycn6sw56w4zns4mpc30837q6yi7ylrx4f";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -600,7 +641,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1d8vg5a9q2ldnbxqap1893lqb66jwcsli2brbjx7mcnqrzcz449x";
};
propagatedBuildInputs = [ pkgs.pil django_1_3 ];
propagatedBuildInputs = [ pil django_1_3 ];
meta = {
description = "A collection of useful extensions for Django";
@ -621,7 +662,10 @@ let pythonPackages = python.modules // rec {
installCommand = ''
python setup.py install --prefix="$out" --root=/ --record="$out/lib/${python.libPrefix}/site-packages/dulwich/list.txt" --single-version-externally-managed
'';
doCheck = false;
# For some reason "python setup.py test" doesn't work with Python 2.6.
# pretty sure that is about import behaviour.
doCheck = python.majorVersion != "2.6";
meta = {
description = "Simple Python implementation of the Git file formats and protocols.";
@ -655,6 +699,7 @@ let pythonPackages = python.modules // rec {
sha256 = "0wfz4nxl95jcr2f2mc5gijgighavcghg33plzbz5jyi531jpffss";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -729,6 +774,9 @@ let pythonPackages = python.modules // rec {
md5 = "abfdbb25d37c28e9da05f1b5c3596d1a";
};
buildInputs = [ nose ];
# 3 failing tests
doCheck = false;
meta = {
@ -784,9 +832,6 @@ let pythonPackages = python.modules // rec {
propagatedBuildInputs = [ twisted pkgs.pyopenssl ];
# For some reason "python setup.py test" doesn't work with Python 2.6.
doCheck = false;
meta = {
homepage = http://foolscap.lothar.com/;
@ -833,7 +878,8 @@ let pythonPackages = python.modules // rec {
sha256 = "0jrajyppdzb3swcxv3w1mpp88vcy7400gy1v2h2gm3pq0dmggaij";
};
# two tests fail on x86_64 at least. I don't know why.
# FAIL: test_sanitize_remove_script_elem (genshi.filters.tests.html.HTMLSanitizerTestCase)
# FAIL: test_sanitize_remove_src_javascript (genshi.filters.tests.html.HTMLSanitizerTestCase)
doCheck = false;
buildInputs = [ pkgs.setuptools ];
@ -859,7 +905,8 @@ let pythonPackages = python.modules // rec {
sha256 = "0bhiyx41kilvy04cgjbvjy2r4b6l7zz31fbrg3l6lvnqm26nihb0";
};
buildInputs = [ pkgs.setuptools ];
buildInputs = [ pkgs.setuptools ] ++
(if python.majorVersion == "2.6" then [ argparse ] else []);
meta = {
description = "automatically generated zsh completion function for Python's option parser modules";
@ -895,6 +942,9 @@ let pythonPackages = python.modules // rec {
buildInputs = [ nose mox ];
# tests fail for python2.6
doCheck = python.majorVersion != "2.6";
propagatedBuildInputs = [ gflags sqlalchemy webob routes eventlet ];
PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
@ -931,6 +981,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1wmd1svx5344alb8ff9vzdam1ccqdl0h7shp1xnsk843hqwc0fz0";
};
# error: invalid command 'test'
doCheck = false;
postUnpack = "find . -print0 | xargs -0 touch";
@ -950,8 +1001,6 @@ let pythonPackages = python.modules // rec {
sha256 = "2e2ce18092c32d1ec54f8a447e14e33585e30f240b883bfeeca65f12b3bcfaf6";
};
doCheck = false; # doesn't have a test
meta = {
homepage = "http://code.google.com/p/httplib2";
description = "A comprehensive HTTP client library";
@ -987,6 +1036,7 @@ let pythonPackages = python.modules // rec {
md5 = "f4f7ddc7c5e55a47222a5cc6c0a87b6d";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1026,6 +1076,7 @@ let pythonPackages = python.modules // rec {
md5 = "506cf1b13020b3ed2f3c845ea0c9830e";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1044,10 +1095,13 @@ let pythonPackages = python.modules // rec {
sha256 = "11qilrs4sd4c1mkd64ikrjsc2vwrshhc54n5mh4xrark9c7ayp0y";
};
buildInputs = [ zopeInterface ];
buildInputs = [ zopeInterface mock ];
preConfigure = "cp test/secrets.py-dist test/secrets.py";
# failing tests for 26 and 27
doCheck = false;
meta = {
description = "A unified interface to many cloud providers";
homepage = http://incubator.apache.org/libcloud/;
@ -1063,7 +1117,8 @@ let pythonPackages = python.modules // rec {
sha1 = "1eebaee375641c9f29aeb21768f917dd2b985752";
};
doCheck = false; # no tests
# error: invalid command 'test'
doCheck = false;
meta = {
homepage = http://code.google.com/p/pylockfile/;
@ -1154,6 +1209,7 @@ let pythonPackages = python.modules // rec {
md5 = "751e8055be2433dfd1a82e0fb1b12f13";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1169,6 +1225,7 @@ let pythonPackages = python.modules // rec {
sha256 = "be37e1d86c65ecacae6683f8805e051e9904e5f2e02bf2b7a34262c46a6d06a7";
};
# error: invalid command 'test'
doCheck = false;
propagatedBuildInputs = [ dateutil numpy pkgs.freetype pkgs.libpng pkgs.pkgconfig pkgs.tcl pkgs.tk pkgs.xlibs.libX11 ];
@ -1245,6 +1302,7 @@ let pythonPackages = python.modules // rec {
sha1 = "b71aeaacf31898c3b38d8b9ca5bcc0664499c0de";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1273,6 +1331,7 @@ let pythonPackages = python.modules // rec {
MySQL_python = buildPythonPackage {
name = "MySQL-python-1.2.3";
# plenty of failing tests
doCheck = false;
src = fetchurl {
@ -1280,7 +1339,9 @@ let pythonPackages = python.modules // rec {
sha256 = "0vkyg9dmj29hzk7fy77f42p7bfj28skyzsjsjry4wqr3z6xnzrkx";
};
propagatedBuildInputs = [ pkgs.mysql pkgs.zlib nose ];
buildInputs = [ nose ];
propagatedBuildInputs = [ pkgs.mysql pkgs.zlib ];
meta = {
description = "MySQL database binding for Python";
@ -1300,6 +1361,7 @@ let pythonPackages = python.modules // rec {
# No support of GUI yet.
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1332,7 +1394,8 @@ let pythonPackages = python.modules // rec {
sha256 = "0ssxic389rdc79zkz8dxcjpqdi5qs80h12khkag410cl9cwk11f2";
};
doCheck = false; # there is no test command
# error: invalid command 'test'
doCheck = false;
meta = {
homepage = https://github.com/drkjam/netaddr/;
@ -1346,41 +1409,41 @@ let pythonPackages = python.modules // rec {
version = "0.10.0";
src = fetchurl {
url = "http://divmod.org/trac/attachment/wiki/SoftwareReleases/Nevow-${version}.tar.gz?format=raw";
url = "http://pypi.python.org/packages/source/N/Nevow/Nevow-${version}.tar.gz";
sha256 = "90631f68f626c8934984908d3df15e7c198939d36be7ead1305479dfc67ff6d0";
name = "${name}.tar.gz";
};
propagatedBuildInputs = [ twisted ];
propagatedBuildInputs = [ twisted ];
postInstall = "twistd --help > /dev/null";
postInstall = "twistd --help > /dev/null";
meta = {
description = "Nevow, a web application construction kit for Python";
meta = {
description = "Nevow, a web application construction kit for Python";
longDescription = ''
Nevow - Pronounced as the French "nouveau", or "noo-voh", Nevow
is a web application construction kit written in Python. It is
designed to allow the programmer to express as much of the view
logic as desired in Python, and includes a pure Python XML
expression syntax named stan to facilitate this. However it
also provides rich support for designer-edited templates, using
a very small XML attribute language to provide bi-directional
template manipulation capability.
longDescription = ''
Nevow - Pronounced as the French "nouveau", or "noo-voh", Nevow
is a web application construction kit written in Python. It is
designed to allow the programmer to express as much of the view
logic as desired in Python, and includes a pure Python XML
expression syntax named stan to facilitate this. However it
also provides rich support for designer-edited templates, using
a very small XML attribute language to provide bi-directional
template manipulation capability.
Nevow also includes formless, a declarative syntax for
specifying the types of method parameters and exposing these
methods to the web. Forms can be rendered automatically, and
form posts will be validated and input coerced, rendering error
pages if appropriate. Once a form post has validated
successfully, the method will be called with the coerced values.
'';
Nevow also includes formless, a declarative syntax for
specifying the types of method parameters and exposing these
methods to the web. Forms can be rendered automatically, and
form posts will be validated and input coerced, rendering error
pages if appropriate. Once a form post has validated
successfully, the method will be called with the coerced values.
'';
homepage = http://divmod.org/trac/wiki/DivmodNevow;
homepage = http://divmod.org/trac/wiki/DivmodNevow;
license = "BSD-style";
};
});
license = "BSD-style";
};
});
nose = buildPythonPackage rec {
name = "nose-1.2.1";
@ -1451,6 +1514,8 @@ let pythonPackages = python.modules // rec {
python setup.py build --fcompiler="gnu95"
python setup.py install --prefix=$out
'';
# error: invalid command 'test'
doCheck = false;
buildInputs = [ pkgs.gfortran ];
@ -1463,7 +1528,7 @@ let pythonPackages = python.modules // rec {
});
oauth2 = buildPythonPackage (rec {
name = "auth2-1.5.211";
name = "oauth2-1.5.211";
src = fetchurl {
url = "http://pypi.python.org/packages/source/o/oauth2/oauth2-1.5.211.tar.gz";
@ -1471,6 +1536,9 @@ let pythonPackages = python.modules // rec {
};
propagatedBuildInputs = [ httplib2 ];
#buildInputs = [ mock coverage ];
# needs coverage
doCheck = false;
meta = {
@ -1482,27 +1550,27 @@ let pythonPackages = python.modules // rec {
};
});
optfunc = buildPythonPackage ( rec {
name = "optfunc-git";
src = pkgs.fetchgit {
url = "http://github.com/simonw/optfunc.git";
rev = "e3fa034a545ed94ac5a039cf5b170c7d0ee21b7b";
};
installCommand = ''
dest=$(toPythonPath $out)/optfunc
mkdir -p $dest
cp * $dest/
'';
doCheck = false;
meta = {
description = "A new experimental interface to optparse which works by introspecting a function definition";
homepage = "http://simonwillison.net/2009/May/28/optfunc/";
};
});
# optfunc = buildPythonPackage ( rec {
# name = "optfunc-git";
#
# src = pkgs.fetchgit {
# url = "https://github.com/simonw/optfunc.git";
# rev = "e3fa034a545ed94ac5a039cf5b170c7d0ee21b7b";
# };
#
# installCommand = ''
# dest=$(toPythonPath $out)/optfunc
# mkdir -p $dest
# cp * $dest/
# '';
#
# doCheck = false;
#
# meta = {
# description = "A new experimental interface to optparse which works by introspecting a function definition";
# homepage = "http://simonwillison.net/2009/May/28/optfunc/";
# };
# });
ply = buildPythonPackage (rec {
name = "ply-3.2";
@ -1547,7 +1615,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1bjy4jn51c50mpq51jbwk0glzd8bxz83gxdfkr9p95dmrd17c7hh";
};
buildInputs = [ pkgs.pycrypto ];
buildInputs = [ pycrypto ];
meta = {
homepage = "http://www.lag.net/paramiko/";
@ -1635,6 +1703,7 @@ let pythonPackages = python.modules // rec {
sha256 = "0x8bfjjqygriry1iyygm5048ykl5qpbpzqfp6i8dhkslm3ryf5fk";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1673,6 +1742,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1sr2bb3g7rl7gr6156j5qv71kg06q1x01r1lbps9ksnyz37djn2q";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1714,6 +1784,7 @@ let pythonPackages = python.modules // rec {
psycopg2 = buildPythonPackage rec {
name = "psycopg2-2.0.13";
# error: invalid command 'test'
doCheck = false;
src = fetchurl {
@ -1782,8 +1853,6 @@ let pythonPackages = python.modules // rec {
python setup.py install --prefix=$out
'';
doCheck = false;
meta = {
description = "Python bindings for PortAudio";
homepage = "http://people.csail.mit.edu/hubert/pyaudio/";
@ -1800,7 +1869,7 @@ let pythonPackages = python.modules // rec {
sha256 = "4a3a085ecf1fcd2736573538ffa114f1f4331b3bbbdd69381e6e172c49c9750f";
};
doCheck = false;
buildInputs = [ pytz ];
meta = {
homepage = http://babel.edgewall.org;
@ -1849,14 +1918,13 @@ let pythonPackages = python.modules // rec {
buildInputs = [ pkgs.curl ];
# error: invalid command 'test'
doCheck = false;
preConfigure = ''
substituteInPlace setup.py --replace '--static-libs' '--libs'
'';
installCommand = "python setup.py install --prefix=$out";
meta = {
homepage = http://pycurl.sourceforge.net/;
description = "Python wrapper for libcurl";
@ -1887,7 +1955,7 @@ let pythonPackages = python.modules // rec {
};
propagatedBuildInputs = [xe];
# tests not described in setup.py
# error: invalid command 'test'
doCheck = false;
meta = {
@ -1920,6 +1988,7 @@ let pythonPackages = python.modules // rec {
sha256 = "5fd887c407015296a8fd3f4b867fe0fcca3179de97ccde90449853a3dfb802e1";
};
# error: invalid command 'test'
doCheck = false;
propagatedBuildInputs = [ pkgs.gpgme ];
@ -1965,7 +2034,10 @@ let pythonPackages = python.modules // rec {
url = "http://pypi.python.org/packages/source/p/pyparsing/${name}.tar.gz";
md5 = "1e41cb219dae9fc353bd4cd47636b283";
};
# error: invalid command 'test'
doCheck = false;
meta = {
homepage = http://pyparsing.wikispaces.com/;
description = "The pyparsing module is an alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions.";
@ -1995,6 +2067,8 @@ let pythonPackages = python.modules // rec {
sha256 = "1idks7j9bn62xzsaxkvhl7bdq6ws8kv8aa0wahfh7724qlbbcf1k";
};
# ERROR: testExtended (tests.test_acls.AclExtensions)
# IOError: [Errno 0] Error
doCheck = false;
buildInputs = [ pkgs.acl ];
@ -2090,6 +2164,7 @@ let pythonPackages = python.modules // rec {
md5 = "3076164a7079891d149a23f9435581db";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -2119,7 +2194,7 @@ let pythonPackages = python.modules // rec {
--replace "/usr/local/lib" "${pkgs.sqlite}/lib"
'';
# FIXME: How do we run the tests?
# error: invalid command 'test'
doCheck = false;
meta = {
@ -2181,9 +2256,6 @@ let pythonPackages = python.modules // rec {
sed -i -e 's|libpython2.7.dylib|lib/libpython2.7.dylib|' Makefile
'');
# The regression test suite expects locale support, which our glibc
# doesn't have by default.
doCheck = false;
checkPhase = "make -C ../Tests";
installPhase = ''
@ -2260,6 +2332,7 @@ let pythonPackages = python.modules // rec {
sha256 = "0jmkffik6hdzs7ng8c65bggss2ai40nm59jykswdf5lpd36cxddq";
};
# error: invalid command 'test'
doCheck = false;
buildInputs = [ pkgs.attr ];
@ -2329,6 +2402,8 @@ let pythonPackages = python.modules // rec {
};
buildInputs = [freetype];
# error: invalid command 'test'
doCheck = false;
meta = {
@ -2348,8 +2423,8 @@ let pythonPackages = python.modules // rec {
propagatedBuildInputs =
[ recaptcha_client pytz memcached dateutil paramiko flup pygments
djblets django_1_3 django_evolution pkgs.pycrypto python.modules.sqlite3
pysvn pkgs.pil psycopg2
djblets django_1_3 django_evolution pycrypto python.modules.sqlite3
pysvn pil psycopg2
];
};
@ -2362,6 +2437,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1c7ipk5vwqnln83rmai5jzyxkjdajdzbk5cgy1z83nyr5hbkgkqr";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -2444,6 +2520,8 @@ let pythonPackages = python.modules // rec {
buildInputs = [pkgs.gfortran];
propagatedBuildInputs = [ numpy ];
# error: invalid command 'test'
doCheck = false;
# TODO: add ATLAS=${pkgs.atlas}
@ -2582,6 +2660,7 @@ let pythonPackages = python.modules // rec {
md5 = "9e8099b57cd27493a6988e9c9b313e23";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -2605,6 +2684,7 @@ let pythonPackages = python.modules // rec {
sourceRoot=`pwd`/`ls -d S*`
'';
# error: invalid command 'test'
doCheck = false;
propagatedBuildInputs = [ pkgs.xlibs.libX11 pkgs.pythonDBus pkgs.pygobject ];
@ -2694,7 +2774,9 @@ let pythonPackages = python.modules // rec {
md5 = "af0a314b6106dd80da24a918c24a1eab";
};
doCheck = false;
buildInputs = [ mock nose ];
# XXX: Ran 0 tests in 0.217s
meta = {
description = "Lightweight and extensible STOMP messaging client";
@ -2705,19 +2787,20 @@ let pythonPackages = python.modules // rec {
});
svneverever = buildPythonPackage rec {
name = "svneverever-778489a8";
src = pkgs.fetchgit {
url = git://git.goodpoint.de/svneverever.git;
rev = "778489a8c6f07825fb18c9da3892a781c3d659ac";
sha256 = "41c9da1dab2be7b60bff87e618befdf5da37c0a56287385cb0cbd3f91e452bb6";
};
propagatedBuildInputs = [ pysvn argparse ];
doCheck = false;
};
# XXX: ValueError: ZIP does not support timestamps before 1980
# svneverever = buildPythonPackage rec {
# name = "svneverever-778489a8";
#
# src = pkgs.fetchgit {
# url = git://git.goodpoint.de/svneverever.git;
# rev = "778489a8c6f07825fb18c9da3892a781c3d659ac";
# sha256 = "41c9da1dab2be7b60bff87e618befdf5da37c0a56287385cb0cbd3f91e452bb6";
# };
#
# propagatedBuildInputs = [ pysvn argparse ];
#
# doCheck = false;
# };
taskcoach = buildPythonPackage rec {
name = "TaskCoach-1.3.8";
@ -2737,6 +2820,7 @@ let pythonPackages = python.modules // rec {
--prefix LD_LIBRARY_PATH : $libspaths
'';
# error: invalid command 'test'
doCheck = false;
meta = {
@ -2772,6 +2856,7 @@ let pythonPackages = python.modules // rec {
sha256 = "1ihf5031pc1wpwbxpfzzz2bcpwww795n5y22baglyim1lalivd65";
};
# couple of failing tests
doCheck = false;
PYTHON_EGG_CACHE = "`pwd`/.egg-cache";
@ -2793,7 +2878,12 @@ let pythonPackages = python.modules // rec {
sha256 = "c0f32fa31e2c5fa42f5cc19f3dba4e73f0438bf36bf756ba137f2423c0ac4637";
};
propagatedBuildInputs = [ oauth2 urwid tweepy ];
propagatedBuildInputs = [ oauth2 urwid tweepy ] ++
(if python.majorVersion == "2.6" then [ argparse ]
else []);
#buildInputs = [ tox ];
# needs tox
doCheck = false;
meta = {
@ -2813,8 +2903,6 @@ let pythonPackages = python.modules // rec {
sha256 = "66d728527ab3d5f5e4d6725654783f99169172678105f609d14353f6626c1315";
};
doCheck = false;
meta = {
homepage = "https://github.com/tweepy/tweepy";
description = "Twitter library for python";
@ -2881,6 +2969,7 @@ let pythonPackages = python.modules // rec {
sha256 = "4437076c8708e5754ea04540e46c7f4f233734ee3590bb8a96389264fb0650d0";
};
# error: invalid command 'test'
doCheck = false;
propagatedBuildInputs = [ pycurl ];
@ -2897,6 +2986,7 @@ let pythonPackages = python.modules // rec {
urwid = buildPythonPackage (rec {
name = "urwid-1.1.1";
# multiple: NameError: name 'evl' is not defined
doCheck = false;
src = fetchurl {
@ -2924,7 +3014,9 @@ let pythonPackages = python.modules // rec {
propagatedBuildInputs = [ python.modules.readline python.modules.sqlite3 ];
doCheck = false;
buildInputs = [ mock nose ];
# XXX: Ran 0 tests in 0.003s
meta = with stdenv.lib; {
description = "a tool to create isolated Python environments";
@ -2943,6 +3035,7 @@ let pythonPackages = python.modules // rec {
md5 = "8492e46496e187b49fe5569b5639804e";
};
# error: invalid command 'test'
doCheck = false;
meta = {
@ -3042,7 +3135,7 @@ let pythonPackages = python.modules // rec {
sha256 = "0v9878cl0y9cczdsr6xjy8v9l139lc23h4m5f86p4kpf2wlnpi42";
};
# tests not described in setup.py
# error: invalid command 'test'
doCheck = false;
meta = {
@ -3131,8 +3224,6 @@ let pythonPackages = python.modules // rec {
sha256 = "294c3c0529e84169177bce78d616c768fa1c028a2fbc1854f615d32ed88dbc6c";
};
doCheck = false;
meta = {
description = "Zope.Interface";
homepage = http://zope.org/Products/ZopeInterface;
@ -3140,22 +3231,23 @@ let pythonPackages = python.modules // rec {
};
};
hgsvn = buildPythonPackage rec {
name = "hgsvn-0.1.8";
src = fetchurl rec {
name = "hgsvn-0.1.8.tar.gz";
url = "http://pypi.python.org/packages/source/h/hgsvn/${name}.tar.gz#md5=56209eae48b955754e09185712123428";
sha256 = "18a7bj1i0m4shkxmdvw1ci5i0isq5vqf0bpwgrhnk305rijvbpch";
};
buildInputs = [ pkgs.setuptools ];
doCheck = false;
meta = {
description = "HgSVN";
homepage = http://pypi.python.org/pypi/hgsvn;
};
};
# XXX: link broken
# hgsvn = buildPythonPackage rec {
# name = "hgsvn-0.1.8";
# src = fetchurl rec {
# name = "hgsvn-0.1.8.tar.gz";
# url = "http://pypi.python.org/packages/source/h/hgsvn/${name}.tar.gz#md5=56209eae48b955754e09185712123428";
# sha256 = "18a7bj1i0m4shkxmdvw1ci5i0isq5vqf0bpwgrhnk305rijvbpch";
# };
#
# buildInputs = [ pkgs.setuptools ];
# doCheck = false;
#
# meta = {
# description = "HgSVN";
# homepage = http://pypi.python.org/pypi/hgsvn;
# };
# };
cliapp = buildPythonPackage rec {
name = "cliapp-1.20120929";
@ -3167,6 +3259,7 @@ let pythonPackages = python.modules // rec {
buildInputs = [ sphinx ];
# error: invalid command 'test'
doCheck = false;
meta = {
@ -3187,6 +3280,7 @@ let pythonPackages = python.modules // rec {
buildInputs = [ sphinx ];
# error: invalid command 'test'
doCheck = false;
meta = {
@ -3207,6 +3301,7 @@ let pythonPackages = python.modules // rec {
buildInputs = [ sphinx ];
# error: invalid command 'test'
doCheck = false;
meta = {
@ -3228,6 +3323,7 @@ let pythonPackages = python.modules // rec {
buildInputs = [ sphinx ];
propagatedBuildInputs = [ tracing ttystatus cliapp ];
# error: invalid command 'test'
doCheck = false;
meta = {