Hi,
Basically I'm asking the same question as this guy: http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python
But no one gave him a correct answer. Given that you are inside a subfolder and you want to go up a directory and then into ANOTHER subfolder, doing what they suggested does not work (as the OP pointed out in his comments to their answers).
I know that you can do this by using sys.path, but I would prefer a cleaner method.
Example:
App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py
How would I import Module_A into Module_B?
- 
                        If I'm reading correctly, in Python 2.5 or higher: from ..Module_B import Module_BI thought I was well-versed in Python but I had no idea that was possible in version 2.5. bobince : That's correct. It's a bit ugly though, and absolute imports are generally the best thing except in special circumstances.ryeguy : THis doesn't work I get "attempted relative import in non-package"bobince : The statement is assumed to be inside Module_A.py (and, post-edit, should be from ..Package_B.) relative imports are based on the package path of the module you are inside, not directories; you can't use them from a top-level script or simple module.
- 
                        If you are then importing Module_B in to App, you would Module_B.py: import ModuleA App.py (which also imports ModuleA which is now by default in your Pythonpath) import Module_B.Module_BAnother alternative, is to update __init__.py (the one in Module_A/App folder) to: import os import sys sys.path.extend('%s../' % os.getcwd()) import ModuleAAnother alternative, is to add your folder to the PYTHONPATH environment var. Aaron Gallagher : Modifying `sys.path` at runtime is nearly always wrong. It's fragile and indicates a badly-structured package.Nick Stinemates : I definitely agree.
- 
                        main.py setup.py app/ -> __init__.py package_a/ -> __init__.py module_a.py package_b/ -> __init__.py module_b.py- You run python main.py.
- main.pydoes:- import app.package_a.module_a
- module_a.pydoes- import app.package_b.module_b
 Alternatively 2 or 3 could use: from app.package_a import module_aThat will work as long as you have appin your PYTHONPATH.main.pycould be anywhere then.So you write a setup.pyto copy (install) the whole app package and subpackages to the target system's python folders, andmain.pyto target system's script folders.
- You run 
 
0 comments:
Post a Comment