在pipenv项目中为python文件创建命令行别名

时间:2018-01-25 20:32:01

标签: 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 python main.py

但是在另一个目录中。

如果它不是pipenv项目,我只是使用shebang作为文件的开头,然后在我的.bashrc中添加别名,但我想使用pipenv的虚拟环境,但我找不到使用pipenv的方法。

3 个答案:

答案 0 :(得分:0)

如果要为脚本使用特定的python环境,则需要将其指向该环境的解释器。在Mac上,默认情况是pipenv将所有virtualenv安装到/Users/<user_name>/.local/share/virtualenvs/但是可以将其设置为described in the manual的不同位置:

  

Pipenv会自动设想WORKON_HOME环境变量(如果已设置) - 这样您就可以告诉pipenv将虚拟环境存储在任何地方,例如:

     

export WORKON_HOME=~/.venvs

     

此外,您还可以让Pipenv通过设置PIPENV_VENV_IN_PROJECT环境变量来粘贴project / .venv中的virtualenv。

您可以在项目文件夹中找到virtualenv与pipenv --venv的确切位置。它返回类似/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

hash = hashlib.sha256(location.encode()).digest()[:6]

只要项目路径没有改变,它应该是相同的。

答案 1 :(得分:0)

您应该将标准setuptools库用于write a setup.py file。特别是,您可以write an entry_points section命名您的主脚本:

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
PATH=$HOME/bin:$PATH

,它将始终可用。

答案 2 :(得分:0)

您可以使用

#!/usr/bin/env pipenv-shebang
安装我的pipenv-shebang软件包后,在脚本中

pip install pipenv-shebang