View previous topic :: View next topic |
Author |
Message |
Vieri l33t
Joined: 18 Dec 2005 Posts: 896
|
Posted: Wed Oct 16, 2024 5:20 pm Post subject: [SOLVED] Perl script: run Python env activate script |
|
|
Hi,
I'd like a Perl script to properly run a program within a Python virtual environment and retrieve its stdout text.
Something like:
Code: | `source /opt/custom_pyvenvs/program/bin/activate param1 param2' |
If I try to run this in Perl I get a "source: No such file or directory" error.
I know source is a BASH built-in command, so can I run the "activate" script directly from the Perl script within a bash shell even though the activate script is supposed to be "sourced"?
Regards,
Vieri
Last edited by Vieri on Thu Oct 17, 2024 12:21 am; edited 1 time in total |
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 342
|
Posted: Wed Oct 16, 2024 5:31 pm Post subject: |
|
|
Sourcing a bash script in a perl interpreter makes no sense.
On the other hand, replicating what the activate script does is almost trivial:
- Define $VIRTUAL_ENV to be the root directory of the virtual environment
- Prepend $VIRTUAL_ENV/bin to $PATH
- Mess with your $PS1
- Define deactivate function to undo everything.
I'm sure perl has its way of altering the environment. |
|
Back to top |
|
|
Vieri l33t
Joined: 18 Dec 2005 Posts: 896
|
Posted: Thu Oct 17, 2024 12:19 am Post subject: |
|
|
Thanks for the feedback.
I do not wish to reimplement what the activate script does.
In any case, the "real" issue at hand is how to properly call a bash script from Perl. I don't see why I can't source a script with the built-in source command in BASH.
In PHP-cli I can do this:
Code: | exec("source /myenv/bin/activate params", $out, $ret); |
So in Perl I thought the backticks would do the same. I read somewhere that Perl's backticks would run /bin/sh which in my case points to bash.
So then I tried the following:
Code: | $out = `bash -c "source /myenv/bin/activate params"`; |
It worked.
Not sure why, but it worked.
Thanks
[EDIT]
In other words, this works:
Code: | $out = `bash -c "source /myenv/bin/activate params"`; |
whereas this does not:
Code: | $out = `source /myenv/bin/activate params`; |
|
|
Back to top |
|
|
|