guile-user
[Top][All Lists]
Advanced

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

Re: python-on-guile


From: david larsson
Subject: Re: python-on-guile
Date: Tue, 11 Feb 2020 08:17:12 +0100

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]