2
respostas

[Bug] ModuleNotFoundError: No module named 'storages'

Segui todas as etapas como descrito na aula porém me deparei com o seguinte erro:

ModuleNotFoundError: No module named 'storages'

Já refiz a instalaçao dos pacotes na venv utilizando as versões django-storages==1.13.2 e boto3==1.26.58 para ficar identica as veroões utilizadas na aula e até copiei as variaveis de ambiente da AWS e e dos static files declaradas no arquivo settings.py do codigo dispnibilizado no github da Alura para corrigir algum erro de digitação mantendo as minhas chaves e mesmo assim esse erro persiste

A variavel 'storages' está delarada nos INSTALLED_APPS

Mais alguém enfrentou esse problema e/ou tem alguma sugestão?

2 respostas

Oi Gustavo,

Então, esse erro ModuleNotFoundError: No module named 'storages' costuma dá quando o python não consegue encontrar o pacote 'storages'. Parece que você já tentou algumas coisas boas, como refazer a instalação dos pacotes na sua virtual environment (venv).

Aqui vão algumas sugestões para você dar uma olhada:

Verifique se a venv está ativada: Às vezes a gente esquece de ativar a virtual environment antes de instalar os pacotes. Dá uma checada se você está com a venv ativada.

source /caminho/para/sua/venv/bin/activate  # No Windows, use o .bat correspondente

Confira se o 'storages' está na lista de pacotes instalados: Dentro da sua venv, rode o comando:

pip freeze

E veja se 'storages' está na lista. Se não estiver, instale novamente:

pip install django-storages==1.13.2

Às vezes a gente instala os pacotes em uma venv e executa o código em outra. Garanta que você está na venv certa quando está rodando o seu código.

Se você tiver um arquivo de requirements.txt, verifique se 'storages' está listado lá e se as versões estão corretas.

Ps: Pode ser bobo, mas às vezes um erro de digitação pode causar esse tipo de problema. Confira se está tudo escrito corretamente.

Se mesmo assim o erro persistir, pode ser algo mais específico ao ambiente que você está utilizando. Nesse caso, dá mais detalhes sobre o seu setup, e a gente tenta ir mais fundo nessa solução.

Olá, muito obrigado pelas dicas, eu já havia tentado tudo isso mas infelizmente não funcionou.

Desinstalei e reinstalei todas as bibliotecas novamente na venv e ainda nao resolveu.

Aí resolvi meter o louco mesmo e instalei todas as bibliotecas fora da venv, no ambiente global mesmo, rodei o runserver no ambiente global e funcionou.

Acredito que o problema é que está faltando alguma biblioteca na venv mas não sei qual é. Reinstalei todas na venv utilizando o requirements.txt dispnibilizado no github da Alura e mesmo assim não funcionou.

requirements.txt:

asgiref==3.5.2
boto3==1.26.58
botocore==1.29.58
Django==4.1
django-storages==1.13.2
jmespath==1.0.1
Pillow==9.3.0
python-dateutil==2.8.2
python-dotenv==0.20.0
s3transfer==0.6.0
six==1.16.0
sqlparse==0.4.2
urllib3==1.26.14

settings.py:

INSTALLED_APPS = [
    'storages',
    ... 
    #(código omitido)
]

...
#(código omitido)
...

# AWS Configuraçao:

AWS_ACCESS_KEY_ID = (my key)

AWS_SECRET_ACCESS_KEY = (my secret key)

AWS_STORAGE_BUCKET_NAME = (my bucket)

AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.sa-east-1.amazonaws.com'

AWS_DEFAULT_ACL = 'public-read'

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400'
}

AWS_LOCATION = 'static'

AWS_QUERYSTRING_AUTH = False

AWS_HEADERS = {
    'Access-Control-Allow-Origin': '*',
}


# Static files (CSS, JavaScript, Images)

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'

STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'setup/static')
]

STATIC_ROOT =  os.path.join(BASE_DIR, 'static')

# Media:

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/media/'

Erro completo que aparece quando rodo na venv:

Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "(diretório python)\Python\Python311\Lib\threading.py", line 1038, in _bootstrap_inner    self.run()
  File "(diretório python)\Python\Python311\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "(diretório projeto)\venv\Lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File (diretório projeto)\venv\Lib\site-packages\django\core\management\commands\runserver.py", line 125, in inner_run
    autoreload.raise_last_exception()
  File "(diretório projeto)\venv\Lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "(diretório projeto)\venv\Lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "(diretório projeto)\venv\Lib\site-packages\django\apps\registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
                 ^^^^^^^^^^^^^^^^^^^^^^^
  File "(diretório projeto)\venv\Lib\site-packages\django\apps\config.py", line 193, in create
    import_module(entry)
  File "(diretório projeto)\Python\Python311\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'storages'

Gostaria que rodasse na venv pois sei que é a boa pratica para um desenvolvedor, mas ao menos estou conseguindo finalizar o projeto no ambiente global.