all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: chuanwei.foo@hotmail.com
Cc: guix-devel@gnu.org
Subject: Re: python-build-system does not wrap script correctly
Date: Sat, 27 Nov 2021 00:00:27 -0500	[thread overview]
Message-ID: <877dcu8a6s.fsf@gmail.com> (raw)
In-Reply-To: <PU1PR01MB215500EA355BE955262EC5BC8D629@PU1PR01MB2155.apcprd01.prod.exchangelabs.com> (Foo Chuan Wei's message of "Thu, 25 Nov 2021 08:50:42 +0000")

Hello Foo,

Foo Chuan Wei <chuanwei.foo@hotmail.com> writes:

> I am trying to package "Speedometer" [1]. This is the package
> definition:
>
> (define-public speedometer
>   (package
>     (name "speedometer")
>     (version "2.8")

[...]

This package is 10 years old and uses Python 2.  I hope it is for the
Guix Past channel :-).

> It builds and installs successfully. However, when the wrapper script is
> run, this error appears:
>
> Traceback (most recent call last):
>   File "/gnu/store/chr1cx6ia0is8s9d07s1nzdla30r6vs1-speedometer-2.8/bin/.speedometer-real", line 11, in <module>
>     load_entry_point('Speedometer==2.8', 'console_scripts', 'speedometer')()
>   File "/gnu/store/d3jwdk2v7xck82z3y3hs99033m9nkkw0-python2-2.7.17/lib/python2.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
>     return get_distribution(dist).load_entry_point(group, name)
>   File "/gnu/store/d3jwdk2v7xck82z3y3hs99033m9nkkw0-python2-2.7.17/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
>     return ep.load()
>   File "/gnu/store/d3jwdk2v7xck82z3y3hs99033m9nkkw0-python2-2.7.17/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2443, in load
>     return self.resolve()
>   File "/gnu/store/d3jwdk2v7xck82z3y3hs99033m9nkkw0-python2-2.7.17/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2449, in resolve
>     module = __import__(self.module_name, fromlist=['__name__'], level=0)
>   File "/gnu/store/chr1cx6ia0is8s9d07s1nzdla30r6vs1-speedometer-2.8/bin/speedometer.py", line 2
>     export PYTHONPATH="/gnu/store/chr1cx6ia0is8s9d07s1nzdla30r6vs1-speedometer-2.8/lib/python2.7/site-packages:/gnu/store/d3jwdk2v7xck82z3y3hs99033m9nkkw0-python2-2.7.17/lib/python2.7/site-packages:/gnu/store/1iszjcyvb537m6cif7fqrrh95r0sg9wp-python2-urwid-2.1.0/lib/python2.7/site-packages${PYTHONPATH:+:}$PYTHONPATH"
>                     ^
> SyntaxError: invalid syntax

For the record, I used this to reproduce the problem:

--8<---------------cut here---------------start------------->8---
(use-modules (gnu packages python)
             (gnu packages python-xyz)
             (guix licenses)
             (guix packages)
             (guix download)
             (guix build-system python))

(define speedometer
  (package
    (name "speedometer")
    (version "2.8")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "Speedometer" version))
       (sha256
        (base32 "0qgpjmahy0wlfszqxg0067ck2xab5k6j42d0ifxg1j281yqnm9bx"))))
    (build-system python-build-system)
    (arguments
     `(#:python ,python-2))
    (propagated-inputs
     `(("python2-urwid" ,python2-urwid)))
    (home-page "https://excess.org/speedometer/")
    (synopsis "Measure and display the rate of data across a network connection")
    (description
     "Console monitor of the rate of data across a network connection or data
being stored in a file.")
    (license lgpl2.1+)))

speedometer
--8<---------------cut here---------------end--------------->8---

> There is apparently something wrong with the wrapper script. What is it?

It's because the speedometer script hacks the arg0 path to resolve the
speedometer.py script, which it proceeds to invoke as a python script:
--8<---------------cut here---------------start------------->8---
# EASY-INSTALL-ENTRY-SCRIPT: 'Speedometer==2.8','console_scripts','speedometer'
__requires__ = 'Speedometer==2.8'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('Speedometer==2.8', 'console_scripts', 'speedometer')()
    )
--8<---------------cut here---------------end--------------->8---

but the 'wrap' phase of the python-build-system has wrapped it (that is,
speedometer.py is now a shell script that wraps speedometer.py):

Perhaps the wrap phase could have known this wasn't a good idea by
looking at the file extension, but in general executables put under bin/
do not have file extensions anyway.

So it's a special case which is not handled by the wrap phase.

I hope that helps!

Maxim


      reply	other threads:[~2021-11-27  5:01 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-25  8:50 python-build-system does not wrap script correctly Foo Chuan Wei
2021-11-27  5:00 ` Maxim Cournoyer [this message]

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

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

  git send-email \
    --in-reply-to=877dcu8a6s.fsf@gmail.com \
    --to=maxim.cournoyer@gmail.com \
    --cc=chuanwei.foo@hotmail.com \
    --cc=guix-devel@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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.