I\'ve been making a python project using pipenv, and I want to be able to run it in a terminal from any location on my (linux) system. Specifically, say I have the following
If you want to use a specific python environment for your script you will need to point it to the interpreter of that environment. On Mac the default is that pipenv
installs all virtualenvs to /Users/
however that can be set to different locations as described in the manual:
Pipenv automatically honors the WORKON_HOME environment variable, if you have it set — so you can tell pipenv to store your virtual environments wherever you want, e.g.:
export WORKON_HOME=~/.venvs
In addition, you can also have Pipenv stick the virtualenv in project/.venv by setting the PIPENV_VENV_IN_PROJECT environment variable.
You can find out where the exact location of the virtualenv is with pipenv --venv
inside your project folder. It returns something like /Users/reedef/.local/share/virtualenvs/project-BpR9WgCa
. The interpreter is in ./bin/python
of that location.
If we assume that you did not set any environment variable and you are using Mac than that means that you can write a script:
#!/usr/bin/env sh
/Users/reedef/.local/share/virtualenvs/project-BpR9WgCa/bin/python /home/project/main.py
and place it somewhere in your $PATH, e.g. /usr/local/bin/my_fancy_main
to let it run in that specific environment.
Note: as mentioned by @Jon in the comments, -BpR9WgCa
at the end of the path is stable as it is made from the project path:
hash = hashlib.sha256(location.encode()).digest()[:6]
It should be the same as long as the project path hasn't changed.