guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: python-on-guile


From: Stefan Israelsson Tampe
Subject: Re: python-on-guile
Date: Tue, 11 Feb 2020 21:57:36 +0100

This error is fixed in repository
/Stefan

On Tue, Feb 11, 2020 at 8:17 AM david larsson <address@hidden>
wrote:

> On 2020-02-10 21:11, Stefan Israelsson Tampe wrote:
> > I have now added the bytes constructor that was not working.
>
> Thanks!
>
> >
> > To compile from source please try use the git repository at:
> >
> > https://gitlab.com/python-on-guile/python-on-guile/
> >
> > see readme for how to compile and what dependencies you have.
>
> I was able to build and install:
>    - guile-persist: commit ebebb66ae6d6c47dbc406cdbcaccb5ffed2e463a
>    - stis-parser: commit 7673dd576abb445fbcfce8c4b6ae961ee860902e
>
> but for python-on-guile Im getting this error on make:
>
> --------------
>
> Makefile:1390: warning: overriding recipe for target 'python'
> Makefile:771: warning: ignoring old recipe for target 'python'
>    GEN      language/python/guilemod.go
> guile: warning: failed to install locale
> warning: failed to install locale: Invalid argument
> ice-9/boot-9.scm:752:25: In procedure dispatch-exception:
> Syntax error:
> language/python/guilemod.scm:271:0: cond-expand: unfulfilled cond-expand
> in form (cond-expand (guile-3.0 (define-set-M lookup-warning-type
> lookup-warning-type) (define-set-M warning warning) (set! %warning-types
> w-types)) (guile-2.0 or guile-2.2 (define-M %warning-types w-types)
> (define-exp-M lookup-warning-type (lambda (name) "Return the warning
> type NAME or `#f' if not found." ((M find) (lambda (wt) (eq? name ((M
> warning-type-name) wt))) (M %warning-types))))))
> make: *** [Makefile:1385: language/python/guilemod.go] Error 1
>
> ---------------
>
> Im compiling with guile2.2
>
> Regards,
> David
>
> >
> > Regards
> > Stefan
> >
> > On Mon, Feb 10, 2020 at 1:14 PM david larsson
> > <address@hidden> wrote:
> >
> >> On 2020-02-09 21:36, Stefan Israelsson Tampe wrote:
> >>> in sys that is
> >>>
> >>> On Sun, Feb 9, 2020 at 9:36 PM Stefan Israelsson Tampe
> >>> <address@hidden> wrote:
> >>>
> >>>> OKey, I changed the values from immutable lists to lists.
> >>>>
> >>
> >> Great!
> >>
> >>>> On Sun, Feb 9, 2020 at 9:27 PM Stefan Israelsson Tampe
> >>>> <address@hidden> wrote:
> >>>>
> >>>> Note that a lot of things are untested because I'm alone on the
> >>>> development.
> >>
> >> Ok, I understand.
> >>
> >> I haven't been able to build a recent version, but if you can share
> >> some
> >> updated instructions, then I could perhaps help out with some
> >> occasional
> >> testing. I have only managed to build from the old commit fc0d7a9 by
> >>
> >> updating the current python-on-guile guix package locally.
> >>
> >>>>
> >>>> netlib is not included, you can test to add the python module
> >> file
> >>>> to a (language python module) directory
> >>
> >> What's been working for me so far is only (load "path/to/file.py")
> >> and
> >> (load-compiled "path/to/file.go").
> >>
> >> (use-modules (a b c)) did not work for me, except to load modules
> >> already shipped with python-on-guile repo; (language python module
> >> python) etc.
> >>
> >>>>
> >>>> I have recently added much more of the python stdlib aka 3.7 but
> >> not
> >>>> all.
> >>>>
> >>>> Not sure what you mean by .scm file and .py fle when it comes to
> >>>> base64
> >>>> using that module in scheme gives
> >>>> scheme@(guile-user)> (b64decode (b64encode "abc"))
> >>>> $2 = b'abc'
> >>>> scheme@(guile-user)> (b64decode (b64encode #(1 2 3)))
> >>>> $3 = b'\x01\x02\x03'
> >>>>
> >>>> Which return a bytevector if you want a string back you need to
> >>>> interpret the bytevector back to a string
> >>
> >> Im getting weird results when trying to output the base64
> >> representation
> >> of a string, take btest.py:
> >> #import sys
> >> import base64
> >> def mybmethod(x):
> >> mybytes = bytes(x, "utf-8")
> >> encodedbytes = base64.b64encode(mybytes)
> >> myb64string = str(encodedbytes, "utf-8")
> >> return myb64string
> >> #print(myb64string)
> >> #mybmethod(sys.argv[1])
> >>
> >> and assume btest.scm using it with:
> >> (add-to-load-path (dirname (current-filename)))
> >> (use-modules (language python module python))
> >> (load "btest.py")
> >> (define-public (mybmethodscm cmdline)
> >> (display (mybmethod (cadr cmdline))))
> >>
> >> With this it will not work to run the scheme file with
> >> guile -e mybmethodscm btest.scm dfasdf
> >>
> >> The error I got indicated that btest.py uses the bytes procedure
> >> from
> >> within python-on-guile instead of from the python3 base64 lib:
> >>
> >> -------------------
> >>
> >> In
> >>
> > /home/user1/VirtualHome/src/code_guile/python-on-guile-test/btest.scm:
> >> 18:11  4 (mybmethodscm _)
> >> In btest.py:
> >> 10:584  3 (_ "dfasdf" . _)
> >> In oop/pf-objects.scm:
> >> 584:15  2 (create-object _ _)
> >> 567:11  1 (the-create-object _ _)
> >> In language/python/bytes.scm:
> >> 99:6  0 Exception thrown while printing backtrace:
> >> Unbound slot in object Error while printing exception.
> >>
> >> language/python/bytes.scm:99:6: Wrong number of arguments to
> >> #<procedure
> >> 7f2bab5d4560 at language/python/bytes.scm:92:0 (self) | (self s)>
> >>
> >> -------------------
> >>
> >> For a moment though, I could run:
> >>
> >> guile -e mybmethodscm btest.scm dfasdf | rev | base64 -d | rev
> >> # gives: dfasdf
> >>
> >> which was also strange.
> >>
> >>>>
> >>>> modules are a bit difficult as I use the guile module system and
> >> the
> >>>> python modules are different.
> >>>> So nested modules needs some work. The best is to test and see.
> >>
> >> Ok, got it!
> >>
> >>>>
> >>>> I will look into the sys thingies
> >>>>
> >>>> Regards
> >>>> Stefan
> >>>>
> >>>> On Sun, Feb 9, 2020 at 8:40 PM david larsson
> >>>> <address@hidden> wrote:
> >>>> Thanks for your explanations, but unfortunately I still can't
> >> figure
> >>>> out
> >>>> how to use this except in the simplest of cases.
> >>>>
> >>>> I am using the guix package python-on-guile 0.1.0-3.00a51a2 -
> >> maybe
> >>>> thats outdated?
> >>>>
> >>>> The simple things I have managed to do, are like:
> >>>>
> >>>> (add-to-load-path (dirname (current-filename)))
> >>>> (load-compiled python-test.go)
> >>>>
> >>>> where python-test.go is compiled with:
> >>>>
> >>>> guild compile python-test.py --output=python-test.go
> >>>> --from=python
> >>>>
> >>>> and contains simple things, like:
> >>>>
> >>>> f(s):
> >>>> a = s + 1
> >>>> return a
> >>>>
> >>>> but if I add statements to python-test.py like:
> >>>>
> >>>> import netaddr
> >>>> def myfun(a)
> >>>> <something using netaddr>
> >>>>
> >>>> (netaddr is a module installed via: pip3 install --user netaddr)
> >>>>
> >>>> I receive an error about not finding the module.
> >>>>
> >>>> I am able to add only the modules which exist in the
> >> python-on-guile
> >>>>
> >>>> repo, like:
> >>>>
> >>>> import sys
> >>>> import base64
> >>>>
> >>>> but Im getting errors, for example Im not able to use things from
> >>>> sys,
> >>>> like:
> >>>>
> >>>> sys.path.append(<somepath>)
> >>>> sys.path.insert(0, <somepath>)
> >>>>
> >>>> I was able to use some things from base64 but I only received
> >> weird
> >>>> results when converting between bytevectors and strings between
> >> the
> >>>> .scm
> >>>> file and .py file. What works fine using python3 python-test.py
> >> do
> >>>> not
> >>>> usually work when passing either a bytevector or string to the
> >> same
> >>>> go-compiled file from the .scm file using the python-code. Not
> >> sure
> >>>> whether there's a problem using python3 vs python2 here?
> >>>>
> >>>> Essentially, what Im looking for is how to proceed if I want to
> >> use
> >>>> modules installed via the pip package manager from guile, and
> >> what
> >>>> paths
> >>>> and imports I need to make, and how I might need to wrap them
> >>>> correctly
> >>>> in the scheme and python files to invoke a pip package procedure
> >>>> from
> >>>> guile.
> >>>>
> >>>> Best regards,
> >>>> David
> >>>>
> >>>> On 2020-02-09 18:59, Stefan Israelsson Tampe wrote:
> >>>>> I'm the author of that lib.
> >>>>>
> >>>>> 1)
> >>>>>
> >>>>> The main bindings are reachable through (language python module
> >>>>> python)
> >>>>>
> >>>>> So you could now go ahead and do
> >>>>>> (use-modules (language python module python))
> >>>>>> ;L python
> >>>>>
> >>>>> And you will get a python shell that works quite ok for one
> >> liners
> >>>>>
> >>>>> 2)
> >>>>>
> >>>>> If you write a module and place it in a/b/c.py
> >>>>> you can use the classes and functions theirin by
> >>>>>
> >>>>> (use-modules (a b c))
> >>>>>
> >>>>> 3)
> >>>>> you can load a .py file as (i hope this work)
> >>>>> (load "a.py")
> >>>>>
> >>>>> 4)
> >>>>> If you place a module in (language python module a.py) you can
> >>>> import
> >>>>> ir as a usual mode as
> >>>>>> from a import *
> >>>>>
> >>>>> The documentation is for the macro framework that enables you to
> >>>> work
> >>>>> with python classes and idioms like python iteration.
> >>>>>
> >>>>> Hope this helps
> >>>>> /Stefan
> >>>>>
> >>>>> On Sun, Feb 9, 2020 at 6:31 PM david larsson
> >>>>> <address@hidden> wrote:
> >>>>>
> >>>>>> Hi everyone,
> >>>>>> I am trying to wrap my head around how to use the
> >> python-on-guile
> >>>>>> library, but Im struggling. Does anyone have example code that
> >>>> might
> >>>>>>
> >>>>>> help, and which isn't too advanced?
> >>>>>>
> >>>>>> All tips and suggestions appreciated!
> >>>>>>
> >>>>>> Best regards,
> >>>>>> David
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]