making a commandline alias to a python file in a pipenv project

后端 未结 3 1327
谎友^
谎友^ 2021-01-06 21:01

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

3条回答
  •  挽巷
    挽巷 (楼主)
    2021-01-06 21:43

    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//.local/share/virtualenvs/ 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.

提交回复
热议问题