about summary refs log tree commit diff
path: root/pkgs/development/python-modules/recursive-pth-loader
diff options
context:
space:
mode:
authorFlorian Friesdorf <flo@chaoflow.net>2012-07-22 02:16:59 +0200
committerFlorian Friesdorf <flo@chaoflow.net>2012-07-23 09:10:57 +0200
commit30ffafb47d14fb905d0ca2345fe097903e9180e1 (patch)
tree29ae4f77bab2013132be9cd0f784dad2c535c245 /pkgs/development/python-modules/recursive-pth-loader
parentc750a667176aa6121c4910ef5e68b1d3a6e73595 (diff)
downloadnixlib-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.nix20
-rw-r--r--pkgs/development/python-modules/recursive-pth-loader/sitecustomize.py46
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)