Re: [ros-users] $PYTHONPATH in launch files

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Armin Hornung
Date:  
To: ros-users
Subject: Re: [ros-users] $PYTHONPATH in launch files
Hi Ken,

thanks for the clarifications. Things are a little clearer on my side
now ;)

>    1. roslaunch automatically will include roslib/src on your
> PYTHONPATH in the remote launch


After Advait's example I had assumed that roslaunch resets the
PYTHONPATH, and then reads the manual override, which would have
resulted in the override needing to include the ROS path every time.

>    2. 3rdparty Python dependencies need to be system installed (via
> rosdep) or made into ROS packages, just like any other dependency, in
> order to be portable. If you follow this model, then there should be
> no need to set PYTHONPATH manually.


It's a third party library that is usually installed somewhere in a
user's home. I assume that adding the directory of its python interface
to the PYTHONPATH is the standard procedure. Of course there could also
be wrapping ROS package / manifest, but then a user would also have to
copy that into the library's dir and add it to the ROS_PACKAGE_PATH.


>    3. In the odd event that another location needs to be added to the
> PYTHONPATH, roslaunch supports an $(env FOO) syntax to parameterize
> this particular setting. This behavior is encouraged as it exposes the
> fact that any user of that launch file has to manually perform
> additional setup on each machine the launch file is used.  You can
> also use $(env PYTHONPATH) to push your current PYTHONPATH to the
> remote machine, assuming you are using NFS or identical layouts. 


Ah, that makes a lot of sense. I wasn't aware of that option, thinking
that the local PYTHONPATH would be stripped by roslaunch while in the
context of a launch file. That should definitely be mentioned or
stressed more in the wiki, because intuitively it does not look like
it's doing anything! For the record, adding:
<env name="PYTHONPATH" value="$(env PYTHONPATH)" />
to the launch file makes the nodes in it behave like they were started
from the command line, which is what I was looking for.




That only leaves one (slightly related) issue: The PYTHONPATH set up in
"setup.sh" when included e.g. in .bashrc. Is there a reason why that
should be completely reset to ROS' PYTHONPATH, and not appended like the
PATH environment variable?

Cheers,
Armin

-- 
Armin Hornung                              Albert-Ludwigs-Universität
www.informatik.uni-freiburg.de/~hornunga   Dept. of Computer Science
        Humanoid Robots Lab
Tel.: +49 (0)761-203-8010                  Georges-Köhler-Allee 79
Fax : +49 (0)761-203-8007                  D-79110 Freiburg, Germany