在pipenv项目中为python文件生成命令行别名
我一直在使用pipenv制作一个python项目,我希望能够在终端上从我(linux)系统的任何位置运行它。 具体来说,假设我有以下目录结构:在pipenv项目中为python文件生成命令行别名,python,aliases,pipenv,Python,Aliases,Pipenv,我一直在使用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 py
/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 a,然后在my.bashrc中添加别名,但我想使用pipenv的虚拟环境,但是我找不到一种使用pipenv的方法。如果您想为脚本使用特定的python环境,则需要将其指向该环境的解释器。在Mac上,默认情况下,
pipenv
将所有virtualenvs安装到/Users//.local/share/virtualenvs/
,但是可以将其设置到不同的位置,如下所示:
如果设置了WORKN_HOME环境变量,则Pipenv会自动接受该变量-因此,您可以告诉Pipenv在任何地方存储您的虚拟环境,例如:
export WORKON\u HOME=~/.venvs
此外,还可以通过设置Pipenv_venv_In_project环境变量,让Pipenv在project/.venv中粘贴virtualenv
您可以通过项目文件夹中的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
是稳定的,因为它:
只要项目路径没有改变,它就应该是相同的。您应该使用标准库来修改。特别是,您可以指定主脚本的名称:
entry_points={
'console_scripts': [
'alias_to_my_project = project.main.main'
]
}
完成此操作后,您可以激活软件包并将其安装到虚拟环境中
pipenv install -e .
# or without pipenv
. ~/vpy/bin/activate
pip install -e .
这将在$VIRTUAL_ENV/bin/alias_to_my_project
中创建一个包装器脚本,用于加载project.main
Python模块并调用其main
函数
包装器脚本了解虚拟环境,可以直接调用,而无需专门激活虚拟环境。所以你可以做一些像
ln-s$VIRTUAL_ENV/bin/alias_to_my_project$HOME/bin/alias_to_my_project
路径=$HOME/bin:$PATH
而且它将始终可用。您可以使用
#!/usr/bin/env pipenv-shebang
在安装“我的软件包”后的脚本中:
能否编辑main.py并添加:
#/usr/bin/env pipenv运行python
然后使main.py可执行并直接调用它?@match I get/usr/bin/env:'pipenv run python':没有这样的文件或目录
,据我所知,散列是从项目路径生成的,因此是稳定的。只要项目路径没有改变,它就应该是相同的。
#!/usr/bin/env pipenv-shebang
pip install pipenv-shebang