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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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