2

My vs code looks like this:

import requests
import json
import os

os.environ = "website.abc.com"
header={"Accept":application/json", "Authorization": f"Bearer {os.environ['MY_API_KEY']}"

#then a parameter list={}
#other code...

I am using windows and my other files run with no problems but when I try to add the api key, the system prints an error message related to the os.environ variable,

# assume MY_API_KEY = 'abcd1234' 

>python myfile.py MY_API_KEY='abcd1234'

I searched for answers online then I tried this:

>set MY_API_KEY = 'abcd1234' && myfile.py

then I searched again and tried this:

>MY_API_KEY='abcd1234' python myfile.py

and the error is always highlighting the MY_API_KEY variable with this message: frozen os in getitem. I looked for the definition of the error which is 'you are trying to access an environment variable that is not currently set within the environment where your python script is running' but I am not sure how it is in a different environment if I am setting it at run time.

Is there a way to set the key value in my run statement in Windows? If not, how can I send my api key without hard coding it? thanx for your help

1
  • Do you just want to pass a parameter into the execution of myfile.py via the command like python myfile.py MY_API_KEY=abcd1234 or similar, as a command-line argument? Commented Aug 18 at 1:16

1 Answer 1

4

The Core Issue is that you’re overwriting os.environ in your script:

os.environ = "website.abc.com" # this breaks everything
  • os.environ is a special dictionary-like object that holds your environment variables.

  • By assigning a string to it, you wipe out the whole mapping, which is why you get errors

So you should remove os.environ = "website.abc.com"

-----------------------------------------------------------------------------------------------------

Now, when it comes to reading environment variables, the recommended way for developers is to use a .env file.

  • Install:
pip install python-dotenv 
# or 
uv add python-dotenv # if using uv as package manager
  • Create a .env file and define the variable in it:

    MY_API_KEY=abcd1234

  • Use python-dotenv to load it:

from dotenv import load_dotenv
import os

load_dotenv()  # will read .env file
header = {"Authorization": f"Bearer {os.environ['MY_API_KEY']}"}

-----------------------------------------------------------------------------------------------------

And if you want to pass the variables like api key and url directly as a command-line argument, then argparse is the right tool.

Here’s a minimal working example:

# myfile.py
import argparse
import requests


def main():
    # 1. Setup CLI parser
    parser = argparse.ArgumentParser(description="Run API client with key")
    parser.add_argument("--MY_API_KEY", required=True, help="Your API key")
    parser.add_argument("--WEBSITE", required=False, default="https://website.abc.com",
                        help="Base URL of the API")
    args = parser.parse_args()

    # 2. Use the parsed arguments
    headers = {
        "Accept": "application/json",
        "Authorization": f"Bearer {args.MY_API_KEY}"
    }

    # Example request
    r = requests.get(args.WEBSITE, headers=headers)
    print("Status:", r.status_code)


if __name__ == "__main__":
    main()

then run it

python myfile.py --MY_API_KEY abcd1234 --WEBSITE https://example.com/
Sign up to request clarification or add additional context in comments.

2 Comments

The .env solution worked! Thank you so much for your thorough answer
Glad to know that!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.