/ / global / app lib pastas importadas no Django - python, django

Importação de pastas global / app lib no Django - python, django

Eu tenho uma estrutura do Django assim (mostrando apenas libs):

project/lib/ # Global libraries that will be used cross apps
project/lib/global_stuff.py
project/apps/app1/lib/special_for_app1.py
project/apps/app2/lib/special_for_app2.py

Alguns aplicativos não possuem uma pasta lib.

from apps.app1.lib import special_for_app1 funciona bem. Mas como posso importar da pasta lib global quando estou dentro de uma pasta que já contém uma pasta lib local?

De dentro do arquivo views.py de aplicativos em um dos aplicativos:


from lib import global_stuff

Me dá ImportError: cannot import name global_stuff


de .lib import global_stuff

Me dá ImportError: cannot import name global_stuff


from ..lib import global_stuff

Me dá ImportError: No module named lib


from ...lib import global_stuff

Me dá ValueError: Attempted relative import beyond toplevel package


from project.lib import global_stuff

Funciona, mas eu realmente não quero ficar preso usando o próprio nome do projeto na importação.


Existe alguma maneira de resolver isso, não usando o nome do projeto na importação ou alterando toda a idéia de lib.

Ou há alguma outra boa prática para armazenar a parte principal do código?

Respostas:

4 para resposta № 1

Você está correto em não querer associar o nome do projeto às importações, portanto, há um padrão comum para isso:

project/
|__/source/
|     |__/lib/
|     |__/app/
|__/deployment/  # code for your production deployment maybe
|
|__/docs/
|__/tests/
|__README
|__requirements.txt

e coloque / path / to / project dentro de seus caminhos em seu virtualenv (você usa virtualenv certo?).

Então você pode fazer dentro do seu código

from source.lib.blah import foo
from source.app.baz import bar

EDIT: Isso só é ideal se você não lançar seu código como código aberto, é claro. Somente quando você tem um projeto interno, onde a gestão continua mudando o nome do projeto: D


3 para resposta № 2

Eu realmente não quero ficar preso usando o nome do projeto em si na importação

Por que não? É a melhor maneira. Note que "as importações relativas de importações intra-embalagem são altamente desencorajadas", - como disse no PEP-8.