我一直在使用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的方法。
答案 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)