recursive pth loader
This commit is contained in:
parent
c750a66717
commit
30ffafb47d
@ -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";
|
||||||
|
};
|
||||||
|
}
|
@ -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)
|
@ -13,6 +13,12 @@ let pythonPackages = python.modules // rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
recursivePthLoader = import ../development/python-modules/recursive-pth-loader {
|
||||||
|
inherit (pkgs) stdenv;
|
||||||
|
inherit python;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
setuptools = import ../development/python-modules/setuptools {
|
setuptools = import ../development/python-modules/setuptools {
|
||||||
inherit (pkgs) stdenv fetchurl;
|
inherit (pkgs) stdenv fetchurl;
|
||||||
inherit python wrapPython;
|
inherit python wrapPython;
|
||||||
|
Loading…
Reference in New Issue
Block a user