Skip to content

Instantly share code, notes, and snippets.

@markph0204
Created December 26, 2017 21:49
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markph0204/dd97d9d301483fcc2cf458f5e44ff25d to your computer and use it in GitHub Desktop.
Save markph0204/dd97d9d301483fcc2cf458f5e44ff25d to your computer and use it in GitHub Desktop.
direnv with pycharm
# enable direnv for python
# this will enable the commandline support as well as support pycharm
# 1 install direnv (Homebrew / pip)
# 2 edit your .bashrc, .bash_profile or .bash_aliases
function venv-here {
# you could just use 'layout python' here for 2.7.x
echo "layout python3" > .envrc
echo "ln -s .direnv/\$(basename \$VIRTUAL_ENV)/ .env" >> .envrc
}
# sample
# cd to any path, then run...
venv-here
# prompted to run direnv allow
direnv allow
#done!
@gloc-mike
Copy link

Thanks @markph0204 ! I really appreciate your reply. I didn't think you/anyone would get to it so quickly! 🥇 👍

I want to specifically understand why .direnv is being used in this context:
echo "ln -s .direnv/\$(basename \$VIRTUAL_ENV)/ .env" >> .envrc

I looked all through https://direnv.net and only found references to .direnv here in the layout python and layout ruby sections of direnv stdlib.

So I think from that reading, that it looks like a $PWD/.direnv file is only created for those layout types. And since I'm using pipenv, it will not be created.

I did some testing and found that I didn't have to have anything but an empty .env file in my project for PyCharm to detect the pipenv venv.

So now the function can be written differently:

function pipenv-venv {
  echo "pipenv --python $(<.python-version)" > .envrc
  echo "layout pipenv" >> .envrc
  echo "dotenv .env" >> .envrc
  echo "pipenv update" >> .envrc
  # PyCharm fix - an empty .env file
  echo "" > .env
}

Thanks a lot!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment