From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Stefan Israelsson Tampe Newsgroups: gmane.lisp.guile.user Subject: Re: python-on-guile Date: Tue, 11 Feb 2020 11:44:53 +0100 Message-ID: References: <018d235b0c26bb87be28ddb1a2b26d42@selfhosted.xyz> <98c0afcebc4b6a584e7a576250b31256@selfhosted.xyz> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="112368"; mail-complaints-to="usenet@ciao.gmane.io" Cc: "Stefan Israelsson Tampe " To: david larsson Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Tue Feb 11 11:45:31 2020 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j1T2o-000T7l-OT for guile-user@m.gmane-mx.org; Tue, 11 Feb 2020 11:45:30 +0100 Original-Received: from localhost ([::1]:47470 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1T2n-0008Q2-Mn for guile-user@m.gmane-mx.org; Tue, 11 Feb 2020 05:45:29 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:33820) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1T2T-0008OX-M9 for guile-user@gnu.org; Tue, 11 Feb 2020 05:45:12 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1T2Q-0007K3-7C for guile-user@gnu.org; Tue, 11 Feb 2020 05:45:09 -0500 Original-Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:43820) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j1T2P-0007Jo-Tn for guile-user@gnu.org; Tue, 11 Feb 2020 05:45:06 -0500 Original-Received: by mail-wr1-x435.google.com with SMTP id r11so8437209wrq.10 for ; Tue, 11 Feb 2020 02:45:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=sDdpAL5zUzIVfS8DEmXquSIeTehaBiMn3R5VlULFY4Q=; b=pwV2BVR1quPgUmAkEsmCVNht0JDkT4NpNv0IOGk8HLDI3Ty7hI+jzH4lUoGnNjg+js fhgENV5nU9QaDdqSdFAdkhUbjxVjXE77vc0At6sCGHGSphwEDhp4S3kypLnweE2lpJKB opzwWHe0Zurh5rRvAqxxHZ4bOqyR5/MHtKQN93E4/ds6wPPMe6TUAnv2UNMce2v8uJBL zAz/7qo9fJogF+PxTUaS/sLa7iuxl/3zPb+c5sbubL9LbXfn2RnPVPO5zH8dSRneYw+N mkUeD7rhic6eF6Eijna6rdDmQRlkKrorH8bVY7FrF4n3neWqdzyPmZe5AnH1c42YbOxF +sAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=sDdpAL5zUzIVfS8DEmXquSIeTehaBiMn3R5VlULFY4Q=; b=pPpK9Nd1xI1ag0ZhK3k0KQCGTD/0urm4XPnC2EMGv/MzF0VWACb3KNXXcl4VAz27BI GA/g6YS/L1sRXEfVRe9OfZUX5bJ12HAyKMRoiNU/lALqm4PuBOSfI+8wqEXoLSVgPNge yiZjnQIvy6zYjnlVTjSUGaSP/X0ZOz5I99Avp1Q2wYOCQe5cvlRkGA+JsA/y8YttZLLN 9iJks9v1qFfUSkpVLqf2nrmOKLaUt6CZuD+7DouSq7QfGV5HkxlmbNE75JepCu6OPCQY 88eUw4Uy9uNJnwHMWoWx8+NGwiFP4LGB416Eh8Ks9UQFowbaGQvYNQs7GQUKa7Cxmc+e 8EIQ== X-Gm-Message-State: APjAAAUteywHDzscjyEjYgYVkRkMspDVY+wJLLJhdacpk1Pgm6CvLT+D zs3bvZl7ZuyL5l7191gDZyF2EQeLj12p86PCdIo= X-Google-Smtp-Source: APXvYqxtaFeEmrYZnnIPGIv4fLs5ityU1axBGvKQj/ySIWoFJHDIRfVYqPcyf0vf+ORU498mfO5WXlMIsuNMbckrP3A= X-Received: by 2002:a5d:4d8d:: with SMTP id b13mr8030487wru.6.1581417904479; Tue, 11 Feb 2020 02:45:04 -0800 (PST) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::435 X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:16153 Archived-At: Good that you are trying end test it for guile 2.2, there is a missing part in a cond-expand e.g. code that expands differently for different versions. I am currently at guile 3.0.0 . I'll fix it when I get home tonight. Regards Stefan On Tue, Feb 11, 2020 at 8:17 AM david larsson 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 > > 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 > >>> wrote: > >>> > >>>> OKey, I changed the values from immutable lists to lists. > >>>> > >> > >> Great! > >> > >>>> On Sun, Feb 9, 2020 at 9:27 PM Stefan Israelsson Tampe > >>>> 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 > >> # >> 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 > >>>> 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) > >>>> > >>>> > >>>> (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() > >>>> sys.path.insert(0, ) > >>>> > >>>> 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 > >>>>> 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 >