You get an ImportError
, because the module in question is not in sys.path
or not accessible, because of some file system permissions.
Here’s a script to check file system permissions of a given distribution, group and name.
chk_perm.py
from pkg_resources import get_distribution
import os
import sys
dist, group, name = sys.argv[1:]
dist = get_distribution(dist)
location = dist.location
einfo = dist.get_entry_info(group, name)
if not einfo:
print('No such group "{}" or name "{}"'.format(group, name))
sys.exit(1)
m_name = einfo.module_name
path = format(os.path.join(location, *m_name.split('.')))
path = path if os.access(path, os.F_OK) else '{}.py'.format(path)
print('If path "{}" exists: {}'.format(path, os.access(path, os.F_OK) if path.endswith('.py') else True))
print('If path "{}" readable: {}'.format(path, os.access(path, os.R_OK)))
Test;
$ python chk_perm.py setuptools console_scripts easy_install
If path "lib/python2.7/site-packages/setuptools/command/easy_install.py" exists: True
If path "lib/python2.7/site-packages/setuptools/command/easy_install.py" readable: True
$ foo
Traceback (most recent call last):
File "bin/foo", line 9, in <module>
load_entry_point('mypkg==0.0.4', 'console_scripts', 'foo')()
File "lib/python2.7/site-packages/pkg_resources/__init__.py", line 549, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "lib/python2.7/site-packages/pkg_resources/__init__.py", line 2542, in load_entry_point
return ep.load()
File "lib/python2.7/site-packages/pkg_resources/__init__.py", line 2202, in load
return self.resolve()
File "lib/python2.7/site-packages/pkg_resources/__init__.py", line 2208, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
ImportError: No module named main
$ python chk_perm.py mypkg console_scripts foo
If path "lib/python2.7/site-packages/pkg/main.py" exists: True
If path "lib/python2.7/site-packages/pkg/main.py" readable: False
$ ls -l lib/python2.7/site-packages/pkg/main.py
-rw-rw---- 1 root root 104 Mar 6 22:52 lib/python2.7/site-packages/pkg/main.py
$ sudo chmod o+r lib/python2.7/site-packages/pkg/main.py
$ ls -l lib/python2.7/site-packages/pkg/main.py
-rw-rw-r-- 1 root root 104 Mar 6 22:52 lib/python2.7/site-packages/pkg/main.py
$ python chk_perm.py mypkg console_scripts foo
If path "lib/python2.7/site-packages/pkg/main.py" exists: True
If path "lib/python2.7/site-packages/pkg/main.py" readable: True
$ foo
App is running