Question:
Fix the python-decouple issue in Django

Problem:

I have an issue getting python-decouple to work in my Django project.


My .env file located in what BASE_DIR in settings.py resolves to:

SECRET_KEY=ARANDOMSECRETKEY


My settings.py:

from pathlib import Path

import locale

from decouple import config


# config.encoding = locale.getpreferredencoding(False)


# Build paths inside the project like this: BASE_DIR / 'subdir'.

BASE_DIR = Path(__file__).resolve().parent.parent


# SECURITY WARNING: keep the secret key used in production secret!

SECRET_KEY = config('SECRET_KEY')


If I start my django project with the config.encoding line commented out, it errors out with:

File "<frozen codecs>", line 322, in decode

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte



If I start my project with that line, different error:

Lib\site-packages\decouple.py", line 92, in get

    raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))

decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value.


I've added the .env file in pretty much every path available now, no luck :( I've also tried to work with a settings.ini file instead:

[settings]

SECRET_KEY=ARANDOMSECRETKEY


This errors out with:

configparser.MissingSectionHeaderError: File contains no section headers.

file: 'xxxx\\settings.ini', line: 1

'ÿþ[\x00s\x00e\x00t\x00t\x00i\x00n\x00g\x00s\x00]\x00\n'


While if I rename the settings.ini file into settings.old, error changes into SECRET_KEY not found. In other words, python-decouple can find the .env and settings.ini files but cannot read them for some reason. Please help :-)


I've also tried creating a fresh venv with just django installed + python-decouple -> same issues. I feel I am missing something very obvious .. but what?


Solution:

To anyone struggling with the same issue, the answer is weird encoding of the .env file. I created this file in powershell (echo . > .env) which set encoding to something weird. Set encoding to UTF-8 or simply create the file in your editor instead, should fix the above.


Answered by: >daan

Credit: >Stackoverflow


Suggested reads:

>How to get item details of Woo Commerce in custom email content?

>How to install Laravel using composer and configure?

>How to make a single result from a database using MySQL?

>How to Make New Model/Controller/Migration in Laravel?

>How to make non-programmers to run a Python program?

>How to solve problems with Python syntax while writing a calculator app?-Python

>How to solve the encoding issue when writing to a text file, with Python?


Ritu Singh

Ritu Singh

Submit
0 Answers