我一直在使用pipenv创建一个python项目,我希望能够从我的(linux)系统上的任何位置在终端中运行它.
具体来说,假设我有以下目录结构:
/home
/project
Pipfile
main.py
/other_dir
我希望能够创建一个别名,允许我像这样调用main.py:
/home/other_dir$alias_to_my_proyect --some args
并在虚拟环境中运行它,具有与之相同的行为
/home/project$pipenv run python main.py
但在另一个目录中.
如果它不是一个pipenv项目,我只是使用一个shebang作为文件的开头,然后在我的.bashrc中添加一个别名,但我想使用pipenv的虚拟环境,但我无法找到一种方法用pipenv做这个.
解决方法:
如果要为脚本使用特定的python环境,则需要将其指向该环境的解释器.在Mac上,默认情况下,pipenv会将所有virtualenv安装到/Users/\u0026lt;user_name\u0026gt;/.local/share/virtualenvs/但是可以将其设置为不同的位置,如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.
你可以在项目文件夹中的pipenv –venv中找到virtualenv的确切位置.它返回类似/Users/reedef/.local/share/virtualenvs/project-BpR9WgCa的内容.解释器位于该位置的./bin/python中.
如果我们假设您没有设置任何环境变量并且您使用的Mac比这意味着您可以编写脚本:
#!/usr/bin/env sh
/Users/reedef/.local/share/virtualenvs/project-BpR9WgCa/bin/python /home/project/main.py
并将它放在$PATH中的某个位置,例如/usr/local/bin / my_fancy_main让它在特定环境中运行.
注意:正如@Jon在评论中所提到的,路径末尾的-BpR9WgCa是稳定的,因为它是is made from the project path:
06001
只要项目路径没有改变,它应该是相同的.