Python and PyQt (Windows) - AttributeError: 'module' object has not attribute run

Dave Angel davea at davea.name
Thu Aug 1 08:39:10 EDT 2013


alesssia wrote:

> I developed a python3-PyQt4 application (I’m a newbie!) on a 32-bit Linux platform, and I’m experiencing some problems when testing it on Windows platforms (Windows 7 and 8, both 64-bit).
>
> I have a module called Pmc.py that contains two methods: run and main, but only the former is used in the PyQt main class. I import the module using the following statement:
>
>           import Pmc
>
> and I call the function run with the following instruction:
>
>           self.results = Pmc.run(self.p, self.m)
>
> obtaining this error:
>
>           AttributeError: 'module' object has not attribute run

When quoting something from your tests, please don't paraphrase or
shorten.  The actual error traceback starts with a line "Traceback (..."
and is several lines long, and the line you did quote is missing some
quotes and uses the word 'not' when i.t was originally 'no'.

In this case, it doesn't matter, but frequently it will.

>
> After some tests, I discovered that renaming Pmc.py in pmc.py

I don't know what that means. Strictly speaking I think that means you
edited the content of pmc.py and renamed its use of the string to
something else.  But I think you're trying to say you renamed Pmc.py to
pmc.py.  That seems backwards to me.  The reverse is more likely to fix
the problem.

> solves my issue. No problems are present when using Linux both 32 and
> 64 bit. 
> I’m using python 3.3 and PyQt 4. 
>
> What am I missing?

Linux is sensitive to case, while Windows is not.  Windows does, however
preserve the case when you look a the directory, either manually with
DIR, or via some Python function.

My guess is that somehow when the zip file was extracted, the case of
this file was not preserved, and it came out  pmc.py.

My suggestion is to simply use all lower-case for your filenames, and
change the references within your source to

   import pmc
   self.results = pmc.run

Pep-8 recommends that you use an uppercase leading letter to indicate a
class name.  So a class of the "same" name as the file would be
     obj = pmc.Pmc(args)

Another possibility is that you have both a pmc.py  AND a Pmc.py. 
That's not legal in Windows, at least if they're in the same directory. 
And it's not advisable in Windows, if they're even in the same project.


-- 
DaveA





More information about the Python-list mailing list