bernie2436
bernie2436

Reputation: 23901

How do I debug a "can not import" error on package import

I am new to python and trying to get a feel for python fuse with this tutorial. I installed pythonfuse with pip. I installed os x fuse by downloading a dmg and installing on os x. When I run this line of code from fuse import FUSE, FuseOSError, Operations from the tutorial I see this:

akh2103$ python myfuse.py 
Traceback (most recent call last):
  File "myfuse.py", line 10, in <module>
    from fuse import FUSE, FuseOSError, Operations
ImportError: cannot import name FUSE

It seems like it can't find the fuse package, can't find the python fuse package or can't find the FUSE, FuseOSError and Operations methods within the package. Which one is it? When I type import fuse where does Python go to look for the fuse package? I'm used to class paths in java: is there a python equivalent? I'm very new to python. How do I begin to debug this.

Upvotes: 2

Views: 3991

Answers (3)

user2709610
user2709610

Reputation:

Say this was your directory structure:

myapp/
    firstpackage/
        __init__.py
        firstmodule.py
    secondpackage/
        __init__.py
        secondmodule.py
    __init__.py
    myfirstapp.py

firstmodule.py

def first_function(data):
    return data

def second_function(data):
    return data

Now let's say we're working from :mod:`myfirstapp`.

If we wanted to access :func:`first_function`, we'd import like:

from myapp.firstpackage.firstmodule import first_function
print first_function('foo')

:mod:`__init__` in 'firstpackage' directory allows :mod:`firstmodule` to be accessed from outside of it's directory. The inclusion of :file:`__init__.py` within a directory makes that directory a Python package.

However, it's better practice to import the whole module like:

import myapp.firstpackage.firstmodule as firstmodule
print firstmodule.first_function('foo')
print firstmodule.second_function('bar')

Another method would be:

from myapp.firstpackage import firstmodule
print firstmodule.second_function('foo')

That way everything is accessible from within your module, and better for readability.

That being said, the :exc:`ImportError` you're receiving is because 'FUSE' does not exist in :mod:`fuse`, whether it's data, class or a function.

Open fuse.py and do a search for 'FUSE' and see if anything comes up. Look for:

def FUSE(): ...
class FUSE(..): ...
FUSE = ...

I know the whole package/module lesson was off topic from your question, but you said you were new, so I thought I'd elaborate :P

Upvotes: 0

Jussi Kukkonen
Jussi Kukkonen

Reputation: 14587

The fuse module was found (otherwise you would see "No module named fuse"). The error you got means that "FUSE" symbol is not found in the module fuse.

My guess is there are several python bindings for FUSE and you are probably looking at a tutorial for a different module than the one you are loading. The other alternative is some drastic changes in the library between different versions.

If you want to see all the symbols exported by a module, use dir():

import fuse
dir(fuse)

Upvotes: 0

sureshvv
sureshvv

Reputation: 4422

It looks in /Library/Python/<version>/site-packages.

You may be having multiple versions which may be the cause of the problem.

Find out where pip installed fuse.

You can use the PYTHONPATH environment variable to add additional folders.

Upvotes: 1

Related Questions