You’re right, the dist-packages is actually a red-herring; it turns out the problem is actually with a trailing colon in PYTHONPATH, which happens when PYTHONPATH is not set and PYTHONPATH=/some/path:$PYTHONPATH
is assigned:
$ cd /usr/src
$ PYTHONPATH=/usr/lib/python2.7/dist-packages python -c "import sys; print sys.path"
['', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages']
$ PYTHONPATH=/usr/lib/python2.7/dist-packages: python -c "import sys; print sys.path"
['', '/usr/lib/python2.7/dist-packages', '/usr/src', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages']
In the second call, there is a trailing colon, and /usr/src
is added to the Python path.
I could not get importing pkg_resources to fail outside of a snap for some reason (the reason why this is an issue). Below is a snapcraft.yaml
that can reproduce it:
name: python-test
version: "0.0.0"
summary: Testing Python
description: Testing Python
confinement: strict
apps:
python-test:
command: python
parts:
example:
plugin: catkin
rosdistro: kinetic
catkin-packages: []
include-roscore: true
Then I get the following error when running in my home directory:
$ python-test -c "import pkg_resources"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2927, in <module>
@_call_aside
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2913, in _call_aside
f(*args, **kwargs)
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2940, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 626, in _build_master
ws = cls()
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 619, in __init__
self.add_entry(entry)
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 675, in add_entry
for dist in find_distributions(entry, True):
File "/snap/python-test/x5/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1972, in find_on_path
for entry in os.listdir(path_item):
OSError: [Errno 13] Permission denied: '/home/ruddick'
The Python path it’s using is:
$ python-test -c "import sys; print sys.path"
['', '/snap/python-test/x5/opt/ros/kinetic/lib/python2.7/dist-packages', '/snap/python-test/x5/usr/lib/python2.7/dist-packages', '/home/ruddick', '/snap/python-test/x5/usr/lib/python2.7', '/snap/python-test/x5/usr/lib/python2.7/plat-x86_64-linux-gnu', '/snap/python-test/x5/usr/lib/python2.7/lib-tk', '/snap/python-test/x5/usr/lib/python2.7/lib-old', '/snap/python-test/x5/usr/lib/python2.7/lib-dynload']
Again, I’m not sure what the right way to address this is since it doesn’t really seem to be a bug except that it’s likely to cause problems for some snapped Python programs that don’t need the home interface.