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: Tue, 11 Feb 2020 08:17:12 +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="20548"; 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 Tue Feb 11 08:18:03 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 1j1Po1-00059o-De for guile-user@m.gmane-mx.org; Tue, 11 Feb 2020 08:18:03 +0100 Original-Received: from localhost ([::1]:44274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1Po0-0006ky-Fj for guile-user@m.gmane-mx.org; Tue, 11 Feb 2020 02:18:00 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:58453) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1Pne-0006jU-W0 for guile-user@gnu.org; Tue, 11 Feb 2020 02:17:41 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1Pnc-0006lE-UD for guile-user@gnu.org; Tue, 11 Feb 2020 02:17:38 -0500 Original-Received: from server0.selfhosted.xyz ([217.64.149.7]:58782) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j1Pnb-0006XN-SO for guile-user@gnu.org; Tue, 11 Feb 2020 02:17:36 -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=1581405445; bh=CzlzeVyVsxwKq2arIj1XjlFk7PLJy4C5JyvXKUNv/Xw=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=u43+D/TvoLV0ejpDzKZkqJHDtprbQ/Ps0rDQPrlJhcSvtakWv4TNuqG7SDDUJGlZ7 F55ZXCWjKZtt2JWn+H4yuAD1ftVy+3/XOwIgXsreKwUw4vY6BHSTw7bNRHvaV8ik68 nCJnfCyMU746RLo4N2CSP4IIDIMqGlNX3cn/7tjb8HrhwXspQP5D0FsctfBFO/l2KK gkptk/Y9Y5HJwVpsds1C7u6QL/vPGCSoWkpw5yPkuKbpz4ItJdsQd5Tncrnr/DfP6z 41YNtWPcvq/dRdBkkFR2YF9rbUmNs+/MmRhyPMKXjkuTnD6hTdQorjtqMgLMOdUiWi 7BYlLyPeJuwHQ== X-Fuglu-Suspect: 5e69f57f27904bbe8c30ed43718dab48 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:16152 Archived-At: 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