It currently works as you describe: "from .B.models import BModel", but I 
need it to work like "from ...B.models import BModel" to import 
apps/B/models.py module. The problem with "..." is that apps directory is 
not a module (i.e. there is no __init__.py file). The app directory is the 
first one in the sys.path list, so the simple "from B.models import BModel" 
should look in apps/B/models.py file, but it looks into current directory 
earlier than app directory.

This structure perfectly works with a simple python scripts (without Django 
included), that's why I suspect that Django hooks something in the import 
procedure.

On Wednesday, June 4, 2014 11:19:50 PM UTC+4, Joseph Catrambone wrote:
>
> It may be worth trying a relative import, depending on which version of 
> Python you're using.  I believe you can do "from .B.models import BModel". 
>  Note the '.' full-stop/period before the module.  I can't promise that 
> will fix your problem, as the layout isn't entirely clear to me, but it 
> might get you on the right track.
>
> On Wednesday, June 4, 2014 3:51:28 AM UTC-4, Vahe Evoyan wrote:
>>
>> I have modules in the project with the same names, all placed in 
>> different applications.
>>
>> Particularly there are two apps that conflict and result an ImportError. 
>> The project structure approximately is as follows.
>>
>> project
>>  |_ project   
>>    |_ settings.py
>>    |_ ...
>>  |_ apps
>>    |_ A
>>      |_ handlers
>>        |_ B.py
>>        |_ C.py
>>    |_ B
>>      |_ models.py
>>
>> The settings file adds apps directory to the system path.
>>
>> BASE_DIR = os.path.dirname(os.path.dirname(__file__))
>> sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
>>
>> This configuration assumes that when I import the B.models it will use 
>> apps/B/models.py. Although the following line in the C.py file raise an 
>> import error as it imports the A/handlers/B.pywhich does not have models
>>  module.
>>
>> A/handlers/C.py:
>>     from B.models import BModel
>>
>> The sys.path variable has a correct items, i.e. the first one in the 
>> list is /path/to/project/appsand sys.modules['B.models'] is referenced 
>> to the correct file.
>>
>> BTW, when I use Django's import_by_path function, everything works fine.
>>
>> Any ideas how I can solve the problem without renaming the modules?
>>
>> Posted sample sources 
>> <https://github.com/vahe-evoyan/django-module-conflict> on GitHub.
>>
>> Thanks in advance!
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/192777eb-9476-4db4-9973-f7587eb003ed%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to