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: Mon, 10 Feb 2020 15:46:30 +0100

>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])


str(x,'utf-8') is supported but not bytes(x,'uft-8'). try to use
x.encode('utf-8') in stead


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]