diff options
author | Florian Friesdorf <flo@chaoflow.net> | 2012-07-22 02:16:59 +0200 |
---|---|---|
committer | Florian Friesdorf <flo@chaoflow.net> | 2012-07-23 09:10:57 +0200 |
commit | 30ffafb47d14fb905d0ca2345fe097903e9180e1 (patch) | |
tree | 29ae4f77bab2013132be9cd0f784dad2c535c245 /pkgs/development/python-modules/recursive-pth-loader | |
parent | c750a667176aa6121c4910ef5e68b1d3a6e73595 (diff) | |
download | nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.tar nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.tar.gz nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.tar.bz2 nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.tar.lz nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.tar.xz nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.tar.zst nixlib-30ffafb47d14fb905d0ca2345fe097903e9180e1.zip |
recursive pth loader
Diffstat (limited to 'pkgs/development/python-modules/recursive-pth-loader')
-rw-r--r-- | pkgs/development/python-modules/recursive-pth-loader/default.nix | 20 | ||||
-rw-r--r-- | pkgs/development/python-modules/recursive-pth-loader/sitecustomize.py | 46 |
2 files changed, 66 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/recursive-pth-loader/default.nix b/pkgs/development/python-modules/recursive-pth-loader/default.nix new file mode 100644 index 000000000000..3452c62e2168 --- /dev/null +++ b/pkgs/development/python-modules/recursive-pth-loader/default.nix @@ -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"; + }; +} diff --git a/pkgs/development/python-modules/recursive-pth-loader/sitecustomize.py b/pkgs/development/python-modules/recursive-pth-loader/sitecustomize.py new file mode 100644 index 000000000000..057e779803cb --- /dev/null +++ b/pkgs/development/python-modules/recursive-pth-loader/sitecustomize.py @@ -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) |