-
-
Save markph0204/dd97d9d301483fcc2cf458f5e44ff25d to your computer and use it in GitHub Desktop.
| # 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! |
Hi,
This gist has been invaluable. Thanks for putting it out there! :)
PyCharm detects & loads my venv, so all good there! :)
But, I have however, been confused by the symbolic link to .direnv in echo "ln -sf .direnv/\$(basename \$VIRTUAL_ENV)/ .env" >> .envrc. I get this message printed, direnv: .env at .env not found, which is the result of runningdotenv .env. Is it just a kludge to get PyCharm to detect and load venv's?
I'm using layout pipenv so any venv's created are actually located in ~/.local/share/virtualenvs/.
I don't find any references to the .direnv file anywhere on my system and it's rather difficult tracking it down on the net too so it would be great if someone could offer an explanation please! :)
Just for reference:
function pipenv-venv {
echo "pipenv --python $(<.python-version)" > .envrc
echo "layout pipenv" >> .envrc
echo "ln -sf .direnv/\$(basename \$VIRTUAL_ENV)/ .env" >> .envrc
echo "dotenv .env" >> .envrc
}
Thanks again! I really appreciate it!
Is it just a kludge to get PyCharm to detect and load venv's?
Yes from what I recall -- .env was linked because that is what PyCharm use to only look for.
I don't find any references to the .direnv file anywhere on my system and it's rather difficult tracking it down on the net too so it would be great if someone could offer an explanation please! :)
I think you mean this? https://direnv.net
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!
@ joaomcarlos there's actually even an easier solution, just place:
it your
.envrcand it will automatically source.envMy biggest problem is that
.envoffers subset of functionality of direnv. When I integrate direnv with Nix I can define not only an environment variables but all developer tooling. That means exact python version that I used during development, with all the python packages, and all system library dependencies my project needs.Then all I need is to
cdinto directory with the projects and suddenly I have everything I need for development installed.It would be awesome if PyCharm could obtain setup that way.