In software development, .envrc
and direnv
are tools used to manage environment variables. While working on a project, I faced a problem while getting environment variables from the .envrc file, though I executed direnv allow
command successfully.
In this article, I am going to discuss how I have solved this issue and additionally, before that, I will discuss .envrc
and direnv
.envrc
Environment variables and their values can be defined in configuration files called .envrc
files which stand for "Environment RC" files. Sensitive data that shouldn't be committed to version control, such as API keys, credentials, and other configuration data, is typically stored in this file. The file, which contains a list of key-value pairs that can be exported as environment variables, is usually stored in the project's root directory.
Similar to .envrc
, .env
is also a configuration file that sets environment variables but the main difference is that .envrc
is specific to direnv
, whereas .env
is a general-purpose file that may be used by any tool or framework.
Consider that you are working on a project that calls for an API key from a third-party service. In the root directory of your project, run this command in the terminal:
vim .envrc
Then insert this line in the .envrc file:
export API_KEY=YOUR_API_KEY
direnv
Environment variables can be managed using the tool known as direnv
, which stands for "directory environment," in a flexible and secure way compared to conventional methods. It allows you to define environment variables for specific directories and automatically exports them when any change has been made into those directories. This can be helpful for projects that need various environment variables for various settings, such as production, staging, and development, or for various stages of development.
Steps to Fix the direnv allow Error
Basic Installation
To install direnv
in MacOS, run this command in the terminal:
brew install direnv
Hook direnv into the Shell
direnv
must be linked to the shell in order to function properly. Each shell has a unique extension system. Now add the following line at the end of the ~/.zshrc
file:
eval "$(direnv hook zsh)"
If you are using Bash then add the following line at the end of the ~/.bashrc
file:
eval "$(direnv hook bash)"
In these examples:
eval
function evaluates the string that is passed to it as a shell command.To use
direnv
in the shell, thedirenv hook zsh
command generates a string of Zsh shell commands to configure.For Bash, it's doing the same mechanism.
Configuring the hook of direnv
, restart your shell to work properly.
After that, the following command needs to be executed in the terminal to make direnv
work.
direnv allow
N.B: If you update the .envrc file, you need to execute the direnv allow
command again.
Retrieve Environment Variable
Once the direnv allow
command will be executed, you can load the environment variables. You can use the API_KEY
variable in your code like this:
import os
api_key = os.getenv("API_KEY")
In this example:
We need to import os which is a Python built-in module that offers a means to communicate with the underlying operating system. Sometimes, Python interpreter might include this os module by default.
In the Python os module, there is a function called
os.getenv
that returns the value of an environment variable.
Conclusion
In conclusion, .envrc
and direnv
are essential tools for managing your environment variables and making sure that your development environment is configured correctly. The methods described in this article can help you identify and fix any problems, including the direnv allow
error. You may optimize your development process and improve your efficiency by following these best practices.
I appreciate you taking the time to read this. Your support is much appreciated! If you found this article valuable, please consider clicking the 👉 Follow button and giving it a few claps by clicking the ❤️ like button to help me create more informative content like this. Thank you for your time! 🖤
Also, follow me on Medium Twitter & LinkedIn
Top comments (0)