From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: david larsson Newsgroups: gmane.lisp.guile.user Subject: Re: python-on-guile Date: Wed, 12 Feb 2020 10:18:29 +0100 Message-ID: References: <018d235b0c26bb87be28ddb1a2b26d42@selfhosted.xyz> <98c0afcebc4b6a584e7a576250b31256@selfhosted.xyz> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="16759"; mail-complaints-to="usenet@ciao.gmane.io" Cc: "Stefan Israelsson Tampe " To: Stefan Israelsson Tampe Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Wed Feb 12 10:19:53 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 1j1oBT-0004Bi-MP for guile-user@m.gmane-mx.org; Wed, 12 Feb 2020 10:19:52 +0100 Original-Received: from localhost ([::1]:34084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1oBS-0005Fm-O0 for guile-user@m.gmane-mx.org; Wed, 12 Feb 2020 04:19:50 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:45544) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1oAb-0004Bo-5X for guile-user@gnu.org; Wed, 12 Feb 2020 04:18:59 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1oAY-0001xU-Ui for guile-user@gnu.org; Wed, 12 Feb 2020 04:18:56 -0500 Original-Received: from server0.selfhosted.xyz ([217.64.149.7]:52200) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1oAX-0001gt-Uz for guile-user@gnu.org; Wed, 12 Feb 2020 04:18:54 -0500 Original-Received: from [127.0.0.1] (localhost [127.0.0.1]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=selfhosted.xyz; s=dkim; t=1581499122; bh=P0as5gmRMtduyLbUqtCSiWAy06Kzawlq4nfZmZe4Tms=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=w6A3zF/UYqyE1DnHC+rgwqevsV7hKf6FVGNrSdH15XNiRST7tOQAqFcLVc91Jga+V 3LgoRnwI9de2+ZovW7sInUSNZgim3M3oLkpAxh0EunSe6jBZtmiq2JL6sFh35FD7/U p6AXLVc0XY6rPY0etDMwWVf2aVqpIChcZ2umSEjJAZ9zS3G08AC4yTU635rEnRDcIc kc6kUS48yFhlznR6DLxTvxRfDOnuD2nrB0LuCVYGMPTtWxBcuf/XWd6ECnzYussW94 TSBcPHdvO1NsHmDFxNleyMWmpEw8VKF5+mQQ3I52DxKr2JPtZXPEEz0udqIJgmc58w m7UVzIZ8WXliw== X-Fuglu-Suspect: 0858d5ec78884b8b95be62dfc21bf628 X-Fuglu-Spamstatus: NO Original-Received: from [127.0.0.1] (localhost [127.0.0.1]) In-Reply-To: X-Sender: david.larsson@selfhosted.xyz X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 217.64.149.7 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:16158 Archived-At: On 2020-02-11 21:57, Stefan Israelsson Tampe wrote: > This error is fixed in repository > /Stefan Thanks. That solved that part. Now Im getting this error on make: (commit 226d33163e7f1e305c0b6e2ada37209513377dff) ---------------------- Makefile:1390: warning: overriding recipe for target 'python' Makefile:771: warning: ignoring old recipe for target 'python' GEN oop/pf-objects.go guile: warning: failed to install locale warning: failed to install locale: Invalid argument Backtrace: In ice-9/boot-9.scm: 2312:4 19 (save-module-excursion #) In language/scheme/compile-tree-il.scm: 31:15 18 (_) In ice-9/psyntax.scm: 1235:36 17 (expand-top-sequence ((define-module (oop #) # (# ?) ?)) ?) 1182:24 16 (parse _ (("placeholder" placeholder)) ((top) #(# # ?)) ?) 285:10 15 (parse _ (("placeholder" placeholder)) (()) _ c&e (# #) #) In ice-9/eval.scm: 293:34 14 (_ #) In ice-9/boot-9.scm: 2874:4 13 (define-module* _ #:filename _ #:pure _ #:version _ # _ ?) 2071:24 12 (call-with-deferred-observers #) 2887:24 11 (_) 222:29 10 (map1 (((oop goops)) ((oop dict) #:renamer #) ?)) 222:29 9 (map1 (((oop dict) #:renamer #) ?)) 222:29 8 (map1 (((ice-9 vlist)) ((ice-9 match)) ((system # #)) ?)) 222:29 7 (map1 (((ice-9 match)) ((system base message)) ((# ?)) ?)) 222:29 6 (map1 (((system base message)) ((language python #)) # ?)) 222:29 5 (map1 (((language python guilemod)) ((ice-9 #)) ((# ?)))) 222:29 4 (map1 (((ice-9 pretty-print)) ((persist persistance)))) 222:17 3 (map1 (((persist persistance)))) 2803:6 2 (resolve-interface _ #:select _ #:hide _ #:prefix _ # _ ?) In unknown file: 1 (scm-error misc-error #f "~A ~S" ("no code for modu?" ?) ?) In ice-9/boot-9.scm: 752:25 0 (dispatch-exception _ _ _) ice-9/boot-9.scm:752:25: In procedure dispatch-exception: no code for module (persist persistance) make: *** [Makefile:1385: oop/pf-objects.go] Error 1 ---------------------- Regards, David > > 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