Re: Using python in D

2019-06-09 Thread Russel Winder via Digitalmars-d-learn
On Sun, 2019-06-09 at 03:42 +, rnd via Digitalmars-d-learn wrote:
> 
[…]
> I also wanted to know: Once executable is successfully created, 
> will it work on systems where Python and pandas are not installed?

I suspect not, but then I do not use Windows.

I would be surprised if the executable was self contained since that
would imply loading the Python VM, it's standard library, and the used
extenal packages.

py2exe does though do this sort of thing so maybe PyD can. I do not
know, sorry.

-- 
Russel.
===
Dr Russel Winder  t: +44 20 7585 2200
41 Buckmaster Roadm: +44 7770 465 077
London SW11 1EN, UK   w: www.russel.org.uk



signature.asc
Description: This is a digitally signed message part


Re: Using python in D

2019-06-09 Thread evilrat via Digitalmars-d-learn

On Sunday, 9 June 2019 at 03:42:23 UTC, rnd wrote:


Thanks for guidance.

I also wanted to know: Once executable is successfully created, 
will it work on systems where Python and pandas are not 
installed?


That is unlikely. PyD is just a D package, it doesn't have the 
ability to mess up with your project files to pack proper 
shippable app.


On linux it also adds complexity due the way how dynamic 
libraries are handled (i.e. need to set this fancy RPATH, 
LD_LIBRARY_PATH, whatever else necessary), so I would first make 
isolated python copy using venv(and install required packages) 
and then copy it to your final redistributable dir, might also 
require messing a bit with linker flags (to tell where to look 
for shared libs), but anyway it all depends on what prebuilt 
python depends, for example it will likely fail if run on older 
distro or just distro with older libc, or if any of its other 
dependencies being older or missing.



As for py_import issue you can also try do import within py_stmt 
and see if it works(assuming python has all relevant paths set 
up).


Re: Using python in D

2019-06-08 Thread rnd via Digitalmars-d-learn

On Saturday, 8 June 2019 at 19:35:00 UTC, Russel Winder wrote:

PyD is hosted on GitHub so it is a question of putting in an 
issue there:


https://github.com/ariovistus/pyd/issues

The best bet is to write up what you have presented on email 
here, and then let the PyD developers guide you into providing 
the data they need to decide what the actual problem is and how 
it might be fixed.


Thanks for guidance.

I also wanted to know: Once executable is successfully created, 
will it work on systems where Python and pandas are not installed?




Re: Using python in D

2019-06-08 Thread Russel Winder via Digitalmars-d-learn
On Sat, 2019-06-08 at 16:53 +, rnd via Digitalmars-d-learn wrote:
> […]
> I did not delete Python2.7 since I thought there could be some 
> part of Debian/installed package that may depend on it. But I 
> will try to do it now.

I overstated the case a bit. I do not use Python 2.7 but there are a
few packages that are LaTeX, Samba, etc. related that still require
Python 2. This is clearly an insane position but the Debian packages
and/or the upstream applications have not been properly managed.  There
are one or two situations where Python 2 should still be used, but for
99.99% of situations Python 3 is the only choice.

> I am not well versed with the procedure of submitting bug report 
> and will appreciate if you/some other expert on this forum does 
> it.

PyD is hosted on GitHub so it is a question of putting in an issue
there:

https://github.com/ariovistus/pyd/issues

The best bet is to write up what you have presented on email here, and
then let the PyD developers guide you into providing the data they need
to decide what the actual problem is and how it might be fixed.

-- 
Russel.
===
Dr Russel Winder  t: +44 20 7585 2200
41 Buckmaster Roadm: +44 7770 465 077
London SW11 1EN, UK   w: www.russel.org.uk



signature.asc
Description: This is a digitally signed message part


Re: Using python in D

2019-06-08 Thread rnd via Digitalmars-d-learn

On Saturday, 8 June 2019 at 09:11:48 UTC, Russel Winder wrote:
...
...
The problem seems to be that PyD is not looking in the right 
place for importing packages, but this is pure speculation.


Perhaps this merits a bug report against the PyD source 
repository?


Thanks for your time, effort and a detailed analysis of this 
problem.


I did not delete Python2.7 since I thought there could be some 
part of Debian/installed package that may depend on it. But I 
will try to do it now.


I am not well versed with the procedure of submitting bug report 
and will appreciate if you/some other expert on this forum does 
it.


best wishes,
rnd.


Re: Using python in D

2019-06-08 Thread Russel Winder via Digitalmars-d-learn
On Fri, 2019-06-07 at 14:02 +, rnd via Digitalmars-d-learn wrote:

This being D meets Python, I thought I'd take a look at this one.

> I tried following in dub.selections.json file:
> 
> {
>   "fileVersion": 1,
>   "versions": {
>   "pyd": "0.10.5"
>   },
>   "subConfigurations": {
>   "pyd": "python35"
>   }
> }

I do not use JSON for human constructed files, and whilst I think SDL
is inferior to TOML for these sorts of files, I am using the Dub
specification:

   name "pyd_test"
   description "A PyD project from rnd on the email list."
   dependency "pyd" version="*"
   subConfiguration "pyd" "python37"

which seems to do the job.

> I also tried python3.5 and python3 in place of python35, but 
> everytime python27 is being used (where pandas is not installed). 
> The error is:

I only have Python 3.7, I deleted Python 2.7 long ago, and always use
the latest Python on Debian (which may get a bit old during the stupid
process called Debian release freeze.

> $ dub run
> Performing "debug" build using /usr/bin/dmd for x86_64.
> pyd 0.10.5: target for configuration "python27" is up to date.   
> <<< NOTE VERSON HERE;
> rntestpy ~master: building configuration "application"...
> Linking...
> To force a rebuild of up-to-date targets, run again with --force.
> Running ./rntestpy
> pyd.exception.PythonException@/home/cardio/.dub/packages/pyd-
> 0.10.5/pyd/infrastructure/pyd/pydobject.d(59):
> exceptions.ImportError: No module named pandas
> 
> /home/cardio/.dub/packages/pyd-
> 0.10.5/pyd/infrastructure/pyd/exception.d:46 void
> pyd.exception.handle_exception(immutable(char)[], ulong)
> [0x56438721e9e8]
> /home/cardio/.dub/packages/pyd-
> 0.10.5/pyd/infrastructure/pyd/pydobject.d:59 pyd.pydobject.PydObject
> pyd.pydobject.PydObject.__ctor(deimos.python.object.PyObject*)
> [0x56438721f2e8]
> /home/cardio/.dub/packages/pyd-
> 0.10.5/pyd/infrastructure/pyd/embedded.d:54 pyd.pydobject.PydObject
> pyd.embedded.py_import(immutable(char)[]) [0x56438721e501]
> source/main.d:6 _Dmain [0x56438721ded0]
> Program exited with code 1
> 
> I also tried command "dub run --force" but still the error 
> persists.

I am getting what appears to be the exact same problem:

   |> dub
   Performing "debug" build using /usr/bin/ldc2 for x86_64.
   pyd 0.10.5: target for configuration "python37" is up to date.
   pyd_test ~master: building configuration "application"...
   To force a rebuild of up-to-date targets, run again with --force.
   Running ./pyd_test 
   pyd.exception.PythonException@source/main.d(10): 
   NameError: name 'pandas' is not defined
   
   exception.d:46 [0x564147a72be6]
   embedded.d:283 [0x564147a72a23]
   main.d:10 [0x564147a6fce1]
   ??:? void rt.dmain2._d_run_main(int, char**, extern (C) int 
function(char[][])*).runAll() [0x7f8116bff12f]
   ??:? _d_run_main [0x7f8116bfef45]
   __entrypoint.d:8 [0x564147a70314]
   ??:? __libc_start_main [0x7f81167d909a]
   ??:? [0x564147a6fb99]
   Program exited with code 1

But I am quietly confident that pandas is installed into the standard
place:

|> aptitude search python3-pandas
i   python3-pandas  
   - data structures for "relational" or "labeled" data - 
Python 3   
i A python3-pandas-lib  
   - low-level implementations and bindings for pandas - Python 
3

So, a priori, this would seem to be a fault within PyD for not looking
up the right place for Python packages.

Having looked at the dub.json ( :-( ) file for PyD it seems that it is
looking in /usr/lib/python3.7m whereas on Debian the directory should
be /usr/lib/python3.7. I have no idea how to control this from a user
dub.sdl.

Of course the installed Python packages are in /usr/lib/python3/dist-
packages, at least on Debian, so the above shouldn't apply!

> I also tried to give command "source pyd_set_env_vars.sh 
> /usr/bin/python3" but still it is not working.
> 
> Another command which I tried produced following output but still 
> the problem persisted:
> 
> $ python3 pyd_get_env_set_text.py
> export PYD_D_VERSION_1=Python_2_4_Or_Later
> export PYD_D_VERSION_2=Python_2_5_Or_Later
> export PYD_D_VERSION_3=Python_2_6_Or_Later
> export PYD_D_VERSION_4=Python_2_7_Or_Later
> export PYD_D_VERSION_5=Python_3_0_Or_Later
> export PYD_D_VERSION_6=Python_3_1_Or_Later
> export PYD_D_VERSION_7=Python_3_2_Or_Later
> export PYD_D_VERSION_8=Python_3_3_Or_Later
> export PYD_D_VERSION_9=Python_3_4_Or_Later
> export PYD_D_VERSION_10=Python_3_5_Or_Later
> export PYD_D_VERSION_11=__PYD__DUMMY__
> export PYD_D_VERSION_12=__PYD__DUMMY__
> export PYD_D_VERSION_13=__PYD__DUMMY__
> export PYD_LIBPYTHON_DIR=/usr/lib
> export PYD_LIBPYTHON=python3.5m

This last one may well be the problem. Try manually adjusting it to

Re: Using python in D

2019-06-07 Thread rnd via Digitalmars-d-learn

On Friday, 7 June 2019 at 10:55:22 UTC, JN wrote:

On Friday, 7 June 2019 at 05:04:30 UTC, rnd wrote:

On Friday, 7 June 2019 at 04:39:14 UTC, rikki cattermole wrote:

On 07/06/2019 3:54 PM, rnd wrote:


How should I 'initialize python' ?


The example is probably a good place to begin.

https://github.com/ariovistus/pyd/blob/master/examples/simple_embedded/hello.d


Thanks for the link. After putting in missing statements, it 
started running but reported:


 exceptions.ImportError: No module named pandas

I believe pyd is working on Python2 while I have pandas 
installed in Python3.


How can I specify Python version 3 in pyd?


https://github.com/ariovistus/pyd

"To use with dub, either specify the relevant subConfiguration 
for your python version, or run source pyd_set_env_vars.sh 
 on linux or pyd_set_env_vars.bat  on 
windows to set the relevant environment variables and use the 
env subConfiguration."


I tried following in dub.selections.json file:

{
"fileVersion": 1,
"versions": {
"pyd": "0.10.5"
},
"subConfigurations": {
"pyd": "python35"
}
}

I also tried python3.5 and python3 in place of python35, but 
everytime python27 is being used (where pandas is not installed). 
The error is:


$ dub run
Performing "debug" build using /usr/bin/dmd for x86_64.
pyd 0.10.5: target for configuration "python27" is up to date.   
<<< NOTE VERSON HERE;

rntestpy ~master: building configuration "application"...
Linking...
To force a rebuild of up-to-date targets, run again with --force.
Running ./rntestpy
pyd.exception.PythonException@/home/cardio/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/pydobject.d(59):
exceptions.ImportError: No module named pandas

/home/cardio/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/exception.d:46 
void pyd.exception.handle_exception(immutable(char)[], ulong) [0x56438721e9e8]
/home/cardio/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/pydobject.d:59 
pyd.pydobject.PydObject 
pyd.pydobject.PydObject.__ctor(deimos.python.object.PyObject*) [0x56438721f2e8]
/home/cardio/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/embedded.d:54 
pyd.pydobject.PydObject pyd.embedded.py_import(immutable(char)[]) 
[0x56438721e501]
source/main.d:6 _Dmain [0x56438721ded0]
Program exited with code 1

I also tried command "dub run --force" but still the error 
persists.


I also tried to give command "source pyd_set_env_vars.sh 
/usr/bin/python3" but still it is not working.


Another command which I tried produced following output but still 
the problem persisted:


$ python3 pyd_get_env_set_text.py
export PYD_D_VERSION_1=Python_2_4_Or_Later
export PYD_D_VERSION_2=Python_2_5_Or_Later
export PYD_D_VERSION_3=Python_2_6_Or_Later
export PYD_D_VERSION_4=Python_2_7_Or_Later
export PYD_D_VERSION_5=Python_3_0_Or_Later
export PYD_D_VERSION_6=Python_3_1_Or_Later
export PYD_D_VERSION_7=Python_3_2_Or_Later
export PYD_D_VERSION_8=Python_3_3_Or_Later
export PYD_D_VERSION_9=Python_3_4_Or_Later
export PYD_D_VERSION_10=Python_3_5_Or_Later
export PYD_D_VERSION_11=__PYD__DUMMY__
export PYD_D_VERSION_12=__PYD__DUMMY__
export PYD_D_VERSION_13=__PYD__DUMMY__
export PYD_LIBPYTHON_DIR=/usr/lib
export PYD_LIBPYTHON=python3.5m

Where could be the problem and how can it be solved?



Re: Using python in D

2019-06-07 Thread Rnd via Digitalmars-d-learn

On Friday, 7 June 2019 at 10:55:22 UTC, JN wrote:

On Friday, 7 June 2019 at 05:04:30 UTC, rnd wrote:

On Friday, 7 June 2019 at 04:39:14 UTC, rikki cattermole wrote:

On 07/06/2019 3:54 PM, rnd wrote:


How can I specify Python version 3 in pyd?


https://github.com/ariovistus/pyd

"To use with dub, either specify the relevant subConfiguration 
for your python version, or run source pyd_set_env_vars.sh 
 on linux or pyd_set_env_vars.bat  on 
windows to set the relevant environment variables and use the 
env subConfiguration."


After executable is created, will it work on systems where Python 
and pandas are not installed?


Re: Using python in D

2019-06-07 Thread JN via Digitalmars-d-learn

On Friday, 7 June 2019 at 05:04:30 UTC, rnd wrote:

On Friday, 7 June 2019 at 04:39:14 UTC, rikki cattermole wrote:

On 07/06/2019 3:54 PM, rnd wrote:


How should I 'initialize python' ?


The example is probably a good place to begin.

https://github.com/ariovistus/pyd/blob/master/examples/simple_embedded/hello.d


Thanks for the link. After putting in missing statements, it 
started running but reported:


 exceptions.ImportError: No module named pandas

I believe pyd is working on Python2 while I have pandas 
installed in Python3.


How can I specify Python version 3 in pyd?


https://github.com/ariovistus/pyd

"To use with dub, either specify the relevant subConfiguration 
for your python version, or run source pyd_set_env_vars.sh python> on linux or pyd_set_env_vars.bat  on windows 
to set the relevant environment variables and use the env 
subConfiguration."


Re: Using python in D

2019-06-06 Thread rnd via Digitalmars-d-learn

On Friday, 7 June 2019 at 04:39:14 UTC, rikki cattermole wrote:

On 07/06/2019 3:54 PM, rnd wrote:


How should I 'initialize python' ?


The example is probably a good place to begin.

https://github.com/ariovistus/pyd/blob/master/examples/simple_embedded/hello.d


Thanks for the link. After putting in missing statements, it 
started running but reported:


 exceptions.ImportError: No module named pandas

I believe pyd is working on Python2 while I have pandas installed 
in Python3.


How can I specify Python version 3 in pyd?



Re: Using python in D

2019-06-06 Thread rikki cattermole via Digitalmars-d-learn

On 07/06/2019 3:54 PM, rnd wrote:

Edit:

I tried above D program and got following error:

core.exception.AssertError@/home/abcde/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/embedded.d(53): 
python not initialized


??:? _d_assert_msg [0x5562d3f3c466]
/home/abcde/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/embedded.d:53 pyd.pydobject.PydObject 
pyd.embedded.py_import(immutable(char)[]) [0x5562d3f0b2f1]

source/main.d:6 _Dmain [0x5562d3f0adeb]


How should I 'initialize python' ?


The example is probably a good place to begin.

https://github.com/ariovistus/pyd/blob/master/examples/simple_embedded/hello.d


Re: Using python in D

2019-06-06 Thread rnd via Digitalmars-d-learn

Edit:

I tried above D program and got following error:

core.exception.AssertError@/home/abcde/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/embedded.d(53):
 python not initialized

??:? _d_assert_msg [0x5562d3f3c466]
/home/abcde/.dub/packages/pyd-0.10.5/pyd/infrastructure/pyd/embedded.d:53 
pyd.pydobject.PydObject pyd.embedded.py_import(immutable(char)[]) 
[0x5562d3f0b2f1]
source/main.d:6 _Dmain [0x5562d3f0adeb]


How should I 'initialize python' ?


Using python in D

2019-06-06 Thread rnd via Digitalmars-d-learn
I have a simple python script file which contains following 3 
statements:


import pandas
df = pandas.read_csv('testfile.csv')
print(df[0:3])

Can I incorporate above in a D program?
I see there is pyd package for using python in D: 
https://code.dlang.org/packages/pyd

Will following program work:


import std.stdio;
import pyd.embedded;

void main(){
py_import("pandas");
py_stmts("df = pandas.read_csv('testfile.csv')"); 
py_stmts("print(df[0:3])");
}

Thanks for your insight.