unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Federico Beffa <beffa@ieee.org>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: Guix-devel <guix-devel@gnu.org>
Subject: Re: [PATCH 1/4] build/python-build-system: Fix easy-install.pth collisions.
Date: Mon, 15 Dec 2014 21:36:27 +0100	[thread overview]
Message-ID: <CAKrPhPPWSe4gVK6mNKk23+RT_HvdZc06W=wzF=-W49dHnV=cYA@mail.gmail.com> (raw)
In-Reply-To: <87y4qaugb1.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 1861 bytes --]

On Sun, Dec 14, 2014 at 9:28 PM, Ludovic Courtès <ludo@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

[-- Attachment #2: 0001-build-python-build-system-Fix-easy-install.pth-colli.patch --]
[-- Type: text/x-patch, Size: 2338 bytes --]

From d32c6b5b51c4d61a2aef7467705073dafc1087d5 Mon Sep 17 00:00:00 2001
From: Federico Beffa <beffa@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	other threads:[~2014-12-15 20:36 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-14 19:39 [PATCH 1/4] build/python-build-system: Fix easy-install.pth collisions Federico Beffa
2014-12-14 20:28 ` Ludovic Courtès
2014-12-15 20:36   ` Federico Beffa [this message]
2014-12-15 21:24     ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKrPhPPWSe4gVK6mNKk23+RT_HvdZc06W=wzF=-W49dHnV=cYA@mail.gmail.com' \
    --to=beffa@ieee.org \
    --cc=guix-devel@gnu.org \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).