theskumar / python-dotenv

Reads key-value pairs from a .env file and can set them as environment variables. It helps in developing applications following the 12-factor principles.
https://saurabh-kumar.com/python-dotenv/
BSD 3-Clause "New" or "Revised" License
7.7k stars 431 forks source link

How to disable python-dotenv #510

Open matthewfranglen opened 8 months ago

matthewfranglen commented 8 months ago

Quite a lot of packages use this library. I have an .env file which I use for a different purpose and cannot be parsed by python-dotenv. I get a lot of messages like:

Python-dotenv could not parse statement starting at line 1
Python-dotenv could not parse statement starting at line 2

Is there an environmental variable that I can set that will disable python-dotenv?

I am not asking about a specific library as I've already encountered this error in flask, pipenv and nltk. Since this library deals with the environment already I think having an environmental variable to disable it is not unreasonable.

duarte-pompeu commented 5 months ago

I'm not sure it will solve it, but I thought of a workaround: point to another file via the -f parameter:

$ echo "a=1" > .env
$ echo "b=2" > /tmp/dummy.env
$ dotenv list # by default grabs vars from .env
a=1
$ dotenv -f /tmp/dummy.env list # does not grab them when pointing towards other file
b=2
matthewfranglen commented 5 months ago

The problem is that I don't want dotenv, it is being loaded by a transitive dependency. I don't call the code and there is no way for me to choose the file that it loads.

The dotenv cli doesn't help with that as the -f setting does not alter how the library loads in future. One solution to this issue would be an environmental variable that points to the file to use, and if set but blank then dotenv reads nothing.

gaardhus commented 2 months ago

I'm having same problem currently getting warnings since I have set up my .env in another way.

gaardhus commented 2 months ago

Adding the following suppressions to my import statements "solved" it.

import logging
import warnings

logging.disable(logging.CRITICAL)

with warnings.catch_warnings(action="ignore"):
    from litellm import completion