theskumar/python-dotenv

Inconsistency with os.environ and str/unicode in Python 2

bbc2 opened this issue · 3 comments

bbc2 commented

In Python 2, os.environ is a map with str keys and str values, not unicode. Unfortunately, values loaded with Python-dotenv are unicode.

Example with test.py:

import os

import dotenv

dotenv.load_dotenv()
print(type(os.environ["foo"]))

and .env:

foo=bar

Results:

> python test.py
<type 'unicode'>
> env foo=bar python test.py
<type 'str'>

I think that it's probably not worth fixing given Python 2's upcoming end of life, but I'm pointing this out here because this might justify turning off some Mypy type warnings for Python 2.

bbc2 commented

Apparently, this was fixed on Windows thanks to #101, but that fix probably accidentally went away with later MRs.

bbc2 commented

this might justify turning off some Mypy type warnings for Python 2

Actually, that's a terrible idea! I just found a bug with Unicode and Python 2 hidden behind a # type: ignore. To be more precise, this bug is fairly recent (version 0.10.0) whereas the str/unicode inconsistency pointed out in this issue has existed for a long time (at least since version 0.9.0). I'll open a separate issue.

Released the fix in v0.10.2, thanks! 🎉