On Sun, Dec 14, 2014 at 9:28 PM, Ludovic Courtès <l...@gnu.org> wrote:
>> +(define* (fix-pth #:key name inputs outputs #:allow-other-keys)
>
> What about calling it ‘rename-pth-file’, which should be more
> descriptive?  Also please add a docstring.

Agreed.

>> +  (let* ((out (assoc-ref outputs "out"))
>> +         (python (assoc-ref inputs "python"))
>> +         (site-packages (string-append out "/lib/python"
>> +                                       (get-python-version python)
>> +                                       "/site-packages"))
>> +         (easy-install-pth (string-append site-packages 
>> "/easy-install.pth"))
>> +         (new-pth (string-append site-packages "/" name ".pth")))
>> +    (if (file-exists? easy-install-pth)
>> +        (rename-file easy-install-pth new-pth))))
>
> Please use ‘when’ instead of ‘if’, and add a trailing #t, to make it
> clear that the phase succeeds.

OK

> Is PACKAGE.pth a common convention?  I mean, does Python (or
> setuptools?) actually use files called PYTHON.pth?

Yes, the basename of path configuration files with extension .pth does
not matter. The site module will load them all. Setuptools, on top of
easy-install.pth, installs a site.py file. This program adds (with
site.addsitedir) all directories in PYTHONPATH to the list of
directories to be processed by the site module.

https://docs.python.org/2/library/site.html

Before writing the path I had conflicts, e.g., between matplotlib and
cairocffi resulting in import failures. After the patch they work
nicely together.

Using NAME.pth  instead of easy-install.pth should guarantee that no
package configuration file collisions occurs between different
packages installed with setuptools, nor between two versions of the
same library.

Attached the amended patch.
Regards,
Fede
From d32c6b5b51c4d61a2aef7467705073dafc1087d5 Mon Sep 17 00:00:00 2001
From: Federico Beffa <be...@fbengineering.ch>
Date: Sat, 13 Dec 2014 22:19:08 +0100
Subject: [PATCH 1/4] build/python-build-system: Fix easy-install.pth
 collisions.

* guix/build/python-build-system.scm (rename-pth-file): New rename-pth-file
  phase and corresponding function.
---
 guix/build/python-build-system.scm | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/guix/build/python-build-system.scm b/guix/build/python-build-system.scm
index 2f3d04a..74ba0c7 100644
--- a/guix/build/python-build-system.scm
+++ b/guix/build/python-build-system.scm
@@ -105,19 +105,36 @@
                             files)))
               bindirs)))
 
+(define* (rename-pth-file #:key name inputs outputs #:allow-other-keys)
+  "Rename easy-install.pth to NAME.pth to avoid conflicts between packages
+installed with setuptools."
+  (let* ((out (assoc-ref outputs "out"))
+         (python (assoc-ref inputs "python"))
+         (site-packages (string-append out "/lib/python"
+                                       (get-python-version python)
+                                       "/site-packages"))
+         (easy-install-pth (string-append site-packages "/easy-install.pth"))
+         (new-pth (string-append site-packages "/" name ".pth")))
+    (when (file-exists? easy-install-pth)
+      (rename-file easy-install-pth new-pth))
+    #t))
+
 (define %standard-phases
   ;; 'configure' and 'build' phases are not needed.  Everything is done during
   ;; 'install'.
-  (alist-cons-after
-   'install 'wrap
-   wrap
-   (alist-replace
-    'build build
+  (alist-cons-before
+   'strip 'rename-pth-file
+   rename-pth-file
+   (alist-cons-after
+    'install 'wrap
+    wrap
     (alist-replace
-     'check check
-     (alist-replace 'install install
-                    (alist-delete 'configure
-                                               gnu:%standard-phases))))))
+     'build build
+     (alist-replace
+      'check check
+      (alist-replace 'install install
+                     (alist-delete 'configure
+                                   gnu:%standard-phases)))))))
 
 (define* (python-build #:key inputs (phases %standard-phases)
                        #:allow-other-keys #:rest args)
-- 
1.8.4

Reply via email to