Import no longer works in Python 2.3.x

M

Matt Whiteley

I have some python code in a directory called customModules and this sits
under the main directory which contains a piece of server.py code. Under
2.1.x and 2.2.x, I did the following in server.py :

import time, sys
sys.path += ['./customModules']

from requestHandler import inputHandler

and that allowed me to reference the requestHandler (stored in the
customModules directory) code without having to use
customModules.requestHandler every time. Under 2.3.x this doesn't work
anymore and I get a "ImportError: cannot import name inputHandler" error.
Can anyone shed some light on why this is and how I can get around it
please.

Code that demonstrates this exact problem is at
http://mss.cynetix.co.uk/download.htm - running server.py will work fine
under 2.2 but not under 2.3.

Many thanks
Matt Whiteley
 
G

Graham Fawcett

Matt Whiteley said:
I have some python code in a directory called customModules and this sits
under the main directory which contains a piece of server.py code. Under
2.1.x and 2.2.x, I did the following in server.py :

import time, sys
sys.path += ['./customModules']

from requestHandler import inputHandler

and that allowed me to reference the requestHandler (stored in the
customModules directory) code without having to use
customModules.requestHandler every time. Under 2.3.x this doesn't work
anymore and I get a "ImportError: cannot import name inputHandler" error.
Can anyone shed some light on why this is and how I can get around it
please.

Unless there's something going on here that's not clear from your
example, you can just add an __init__.py to your customModules
directory, and then use

from customModules.requestHandler import inputHandler

Adding __init__.py creates a "pacakge" out of the subdirectory, and
obviates the sys.path manipulations. See the "Packages" section at
http://www.python.org/doc/current/tut/node8.html for more information.

-- Graham
 
P

Paul Clinch

Interesting, I note that there has been some code revision around the
import. See the whats new in python 2.3, Importing Modules from Zip
Archives and New Import Hooks.

If a full pathname is used, eg.
/home/paul/projects/test/customModules
the code works as before. This would definitely be safer since the
current directory may change in the future, causing the import to fail
anyway.

Regards, Paul Clinch
 
M

Matt Whiteley

Hmmm, that messes up all my imports from all over my code and it's all
worked before so I'd rather not. I also wanted the code to be able to run
straight out of the box without people having to hard code the paths.

Thanks anyway though!

Graham Fawcett said:
"Matt Whiteley" <[email protected]> wrote in message
I have some python code in a directory called customModules and this sits
under the main directory which contains a piece of server.py code. Under
2.1.x and 2.2.x, I did the following in server.py :

import time, sys
sys.path += ['./customModules']

from requestHandler import inputHandler

and that allowed me to reference the requestHandler (stored in the
customModules directory) code without having to use
customModules.requestHandler every time. Under 2.3.x this doesn't work
anymore and I get a "ImportError: cannot import name inputHandler" error.
Can anyone shed some light on why this is and how I can get around it
please.

Unless there's something going on here that's not clear from your
example, you can just add an __init__.py to your customModules
directory, and then use

from customModules.requestHandler import inputHandler

Adding __init__.py creates a "pacakge" out of the subdirectory, and
obviates the sys.path manipulations. See the "Packages" section at
http://www.python.org/doc/current/tut/node8.html for more information.

-- Graham
 
M

Matt Whiteley

Hmm, didn't want to have to hard code paths really. I can't understand
what's been broke all of a sudden. I know there's a fair bit of thought gone
into the os.path logic but I can't seem to find anything that relates
directly to my problem.

Thanks Anyway,
Matt
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top