How can I import functions from another python file

Shane Geiger sgeiger at ncee.net
Mon Apr 9 20:50:36 EDT 2007


>> Hi,
>> i have 2 python files in *different directory* , how can I import
>> python functions from 1 python file to another?
>>
>> i get this error:
>> import task
>> ImportError: No module named task/
>>
>>     
>
>
> The directory that module is in must by on your python
> path in order to import it.
That's not exactly correct.  You *can* import from files that aren't in 
your sys.path.  What follows is a full-working (with python 2.5) 
example.  Perhaps ihooks is going to be obsolete at some point, but it 
works now.  See PEP 302 for more info.  (I'm not sure how to modify this 
example to work with a newer import mechanism or else I would provide it 
to you.)



import os
def writefile(f, data, perms=750): open(f, 'w').write(data) and 
os.chmod(f, perms)

foobar = """
print "this is from the foobar module"

def x():
    print "This is the x function."

"""

writefile('/tmp/foobar.py', foobar)


# File:ihooks-example-1.py
import ihooks, imp, os, sys
def import_from(filename):
    "Import module from a named file"
    if not os.path.exists(filename):
        sys.stderr.write( "WARNING: Cannot import file." )
    loader = ihooks.BasicModuleLoader()
    path, file = os.path.split(filename)
    name, ext = os.path.splitext(file)
    m = loader.find_module_in_dir(name, path)
    if not m:
        raise ImportError, name
    m = loader.load_module(name, m)
    return m

foo = import_from("/tmp/foobar.py")

print foo.x
print foo.x()
print foo.x()




>  You can do it by modifying
> sys.path or by setting the PYTHONPATH env variable.
>
>
> $ mkdir otherdir
> $ cat > otherdir/amod.py
> def afunc():
>     return 'found'
> $ python
>   
>>>> import amod
>>>>         
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> ImportError: No module named amod
>   
>>>> import sys
>>>> sys.path.append('otherdir')
>>>> import amod
>>>> amod.afunc()
>>>>         
> 'found'
>   

-- 
Shane Geiger
IT Director
National Council on Economic Education
sgeiger at ncee.net  |  402-438-8958  |  http://www.ncee.net

Leading the Campaign for Economic and Financial Literacy

-------------- next part --------------
A non-text attachment was scrubbed...
Name: sgeiger.vcf
Type: text/x-vcard
Size: 310 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20070409/66d37590/attachment.vcf>


More information about the Python-list mailing list