[Geany-Users] Can't import local module

Matthew Brush mbrush at xxxxx
Fri Dec 13 20:02:54 UTC 2019


On 2019-12-13 8:53 a.m., paul Marlin wrote:
> This is a variation of the many questions complaining that one can't 
> import exotic external modules, even though the import works from the 
> terminal.  The many answers suggest fixing the execute command in the 
> Build screen. The difference here is that I can't import a module from 
> my own machine, but that it works at both the terminal and Idle.  I 
> suspect my problem is a PATH issue.  Geany seems like a very nice 
> editor/IDE.  But if I can't import even my own modules, it's not very 
> useful.
> 
> My simplified directory structure:
> 
> py - root for storing python MODULES (apps) and a module of user defined 
> functions (included in PYTHONPATH)
> 
> ----| main
> 
>           main.py
> 
> ----| common (for storing functions accessible by multiple modules
> 
>           fun.py
> 
> The code:
> 
> _main.py_
> 
> from common import fun
> 
> fun.test()_
> _
> 
> _fun.py_
> 
> def test():
> 
>      print('testing')
> 
> _Ouput from Idle_
> 
> ========================== RESTART: C:/py/test/main.py 
> =========================
> testing
>  >>> _
> _

The path shown `C:/py/test/main.py` isn't how you described your layout, 
it should be `C:/py/main/main.py` according to how you described it.

> 
> _Output from Geany_
> 
> 
> ModuleNotFoundError: No module named 'py'
> 
> Original exception was:
> Traceback (most recent call last):
>    File "test.py", line 1, in <module>
>      from py.common import fun
> ModuleNotFoundError: No module named 'py'
> 

I'm not sure exactly what you're going for, but often you will have your 
main script in the top level, and then put common/library code in a 
package directory, with an (often empty) `__init__.py` file. Something 
like this:

   - py
     - main.py
     - common
       - __init__.py
       - fun.py

If you lay it out like this, it "Just Works" out of the box with Geany's 
execute command for `main.py`, without messing with any path variables 
or anything.

If you want to leave it where `main.py` is in a directory that is a 
sibling of your common/library package, you will probably have to mess 
with paths and/or use some kind of relative imports.

I don't think your problem is with Geany as much as with trying to 
understand Python's quite complicated import mechanisms/rules/conventions.

Hope that helps.

Regards,
Matthew Brush


More information about the Users mailing list