为 pipenv 项目中的 python 文件创建命令行别名
making a commandline alias to a python file in a pipenv project
我一直在使用 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
将所有 virtualenvs 安装到 /Users/<user_name>/.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 的确切位置。它 returns 类似于 /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]
只要项目路径没变,应该是一样的
您应该使用命名主脚本的标准 setuptools library to write a setup.py
file. In particular you can 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
函数。
wrapper 脚本知道虚拟环境,可以直接调用,无需专门激活虚拟环境。所以你可以做类似
的事情
ln -s $VIRTUAL_ENV/bin/alias_to_my_project $HOME/bin/alias_to_my_project
PATH=$HOME/bin:$PATH
它将永远可用。
你可以直接使用
#!/usr/bin/env pipenv-shebang
在安装我的 pipenv-shebang 包后在脚本中:
pip install pipenv-shebang
我一直在使用 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
将所有 virtualenvs 安装到 /Users/<user_name>/.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 的确切位置。它 returns 类似于 /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]
只要项目路径没变,应该是一样的
您应该使用命名主脚本的标准 setuptools library to write a setup.py
file. In particular you can 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
函数。
wrapper 脚本知道虚拟环境,可以直接调用,无需专门激活虚拟环境。所以你可以做类似
的事情ln -s $VIRTUAL_ENV/bin/alias_to_my_project $HOME/bin/alias_to_my_project
PATH=$HOME/bin:$PATH
它将永远可用。
你可以直接使用
#!/usr/bin/env pipenv-shebang
在安装我的 pipenv-shebang 包后在脚本中:
pip install pipenv-shebang