Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pipenv项目中为python文件生成命令行别名_Python_Aliases_Pipenv - Fatal编程技术网

在pipenv项目中为python文件生成命令行别名

在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

我一直在使用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 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