相关文章推荐
憨厚的烈酒  ·  检查失败:1 == ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I have started to work on a Django project, and I would like to set some environment variables without setting them manually or having a bash file to source.

I want to set the following variables:

export DATABASE_URL=postgres://127.0.0.1:5432/my_db_name
export DEBUG=1
# there are other variables, but they contain personal information

I have read this, but that does not solve what I want. In addition, I have tried setting the environment variables in Preferences-> Build, Execution, Deployment->Console->Python Console/Django Console, but it sets the variables for the interpreter.

Setting variables in pycharm has one disadvantage, that is you lose them if you delete the profile. An alternative is just to set a default value like the following import os os.getenv(key='DATABASE_URL', default='postgres://127.0.0.1:5432/my_db_name') – YH Wu Jul 19, 2018 at 3:00 I think if you use the approach mentioned in my answer you won't lose the environment variables since they will be in the file you use. This answer is not addressing the question since it refers how to set them in PyCharm not if they are lose or not. – lmiguelvargasf Jul 19, 2018 at 12:57 I also do not consider a good idea to hardcode values directly in code. This is a very bad practice. – lmiguelvargasf Jul 19, 2018 at 13:58 oh, I was just trying to type on that line, the triple dot looked grayed out so i didn't even think to click on it. – alexey Sep 11, 2017 at 18:17 I tried this method but PyCharm doesn't pick the defined env var (I specifically tried to set DATABASE_URL). Looks like a PyCharm bug. – LNI Nov 2, 2017 at 1:14 @LNI in PyCharm there are two places where we can set env variables. One is for running environment(and it sets how Joran showed) and also we can set variables which will be available for console in Pycharm(and it sets here Preferences -> Build, Execution, Deployment -> Console -> Python Console ) – Roman Kazakov Jan 15, 2018 at 8:00 why doesn't work this in my PyCharm 2021.2.1 (Professional Edition), using on Ubuntu 18.04.6 bionic. This clearly 'simle things' not working that's so frustrating. Printing out sorted(os.environ.items()) from inside django.conf.__init__ doesn't even lists PYTHONUNBUFFERED - very frustrating. – harry hartmann Oct 31, 2021 at 16:10

I was able to figure out this using a PyCharm plugin called EnvFile. This plugin, basically allows setting environment variables to run configurations from one or multiple files.

The installation is pretty simple:

Preferences > Plugins > Browse repositories... > Search for "Env File" > Install Plugin.

Then, I created a file, in my project root, called environment.env which contains:

DATABASE_URL=postgres://127.0.0.1:5432/my_db_name
DEBUG=1

Then I went to Run->Edit Configurations, and I followed the steps in the next image:

In 3, I chose the file environment.env, and then I could just click the play button in PyCharm, and everything worked like a charm.

@lmiguelvargasf I can't thank you enough for this answer. It looks like Pycharm can't pick up env vars sources in .bashrc (I'm on Linux). This plugin saved me a lot of time as I can use postactivate file as source. – jacekbj Jun 30, 2017 at 11:15 @krinker, when you are browsing for the file, please press, cmd + shift+. to show the hidden files. – lmiguelvargasf Sep 5, 2019 at 16:55

How to set environment variables in PyCharm?

The two most-upvoted answers tell you how to set environment variables for PyCharm Run/Debug Configurations - manually enter them in "Environment variables" or use EnvFile plugin.

After using PyCharm for many years now, I've learned there are other key areas you can set PyCharm environment variables. EnvFile won't work for these other areas!

Here's where ELSE to look (in Settings):

  • Tools > Terminal > Environment variables
  • Languages & Frameworks > Django > Environment variables
  • Build, Execution, Deployment > Console > Python Console > Environment variables
  • Build, Execution, Deployment > Console > Django Console > Environment variables
  • and of course, your run/debug configurations that was already mentioned.

    I am pycharm 2019, and I don't see the tab EnvFile. Is this available in Python configuration (your screenshot is DjangoServer)? – alltej Apr 13, 2020 at 18:38

    This is what you can do to source an .env (and .flaskenv) file in the pycharm flask/django console. It would also work for a normal python console of course.

  • Do pip install python-dotenv in your environment (the same as being pointed to by pycharm).

  • Go to: Settings > Build ,Execution, Deployment > Console > Flask/django Console

  • In "starting script" include something like this near the top:

    from dotenv import load_dotenv
    load_dotenv(verbose=True)

    The .env file can look like this: export KEY=VALUE

    It doesn't matter if one includes export or not for dotenv to read it.

    As an alternative you could also source the .env file in the activate shell script for the respective virtual environement.

    thank you, this answer actually addresses the env being in the terminal and not just in the run config. – hurlbz Dec 2, 2021 at 14:38

    This method helped me a lot for calling environmental variable from a .env file and its really easy to implement too.

  • Create a .env file in the root folder of the project

  • Install a package called "python-dotenv"

  • Import and load the package in the .py file where you want to use the environment variable as follows

     import os
     from dotenv import load_dotenv, find_dotenv
     load_dotenv(find_dotenv())
     any_secret_var = os.get_env("SECRET_KEY")
    

    and BOOM it will work like magic

    And the .env file should look like, don't place any qoutes around the values in the .env file

        SECRET_KEY=any_secret_value_you_need_to_place_in
    

    None of the above methods worked for me. If you are on Windows, try this on PyCharm terminal:

    setx YOUR_VAR "VALUE"
    

    You can access it in your scripts using os.environ['YOUR_VAR'].

    Let's say the environment variables are in a file and store like below. Copy all of them to clipboard Ctrl+A -> Ctrl+C

    Then click on Edit Configurations -> Environment Variables.

    Now click on the small paste icon, and all the environment variables, will be available for usage in current environment.

    Solution tested with virtual environment.

    Create an script that define and export or source the env vars. Then define the script as the python interpreter of an existing virtual env. The solution works for any task like run, debug, console ...

    Example script:

    #!/bin/bash
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    export VAR1="TEST1"
    source $DIR/../../.env
    $DIR/python "$@"
    

    In case anyone want to set environment variables for all their Run/Debug Configuration, I list my solution here.

  • Go to the Edit Configurations as pointed by other answers.
  • Click edit the configuration templates in the panel.
  • Edit environment variables there.
  • By doing so, the variables will be there every time you create a new configuration.

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.

  •