运行 python 带有 fabric 和 pipenv 的脚本

Running python script with fabric and pipenv

我的项目是建立在 python 3 上的,我想使用 Fabric 来自动化几个脚本。 我正在使用 pipenv 进行部门管理。但是我无法使用 python 3. 运行 Fabric 命令。 这是我的问题的简化脚本。

from fabric.tasks import task

PIPENV = '/home/viktor/.local/bin/pipenv'
PROJECT_PATH = '/home/viktor/dev/fabric'

@task
def test1(c):        
    c.run('python --version')

@task
def test2(c):
    with c.cd(PROJECT_PATH):
        c.run(f'{PIPENV} run python --version')

示例:

viktor@pro:~/dev/fabric$ pipenv run python --version
Python 3.7.5

viktor@pro:~/dev/fabric$ pipenv run fab test1
Python 2.7.17

viktor@pro:~/dev/fabric$ pipenv run fab test2
Warning: the which -a system utility is required for Pipenv to find Python installations properly.
  Please install it.
Error: the command python could not be found within PATH or Pipfile's [scripts].
viktor@pro:~/dev/fabric$ 

系统中安装了哪个实用程序

而且我在 Pipfiles 中找不到任何关于 PATH 设置的信息

有什么想法吗?

更新

我能够通过这个丑陋的解决方法做到这一点:

@task
def test3(c):
    c.run(f'source $({PIPENV} --venv)/bin/activate && python --version')


>> viktor@pro:~/dev/fabric$ pipenv run fab test3
>> Python 3.7.5

它有效,但我想知道是否有更好的方法来做到这一点

我没有看到您指定要连接的远程主机,但无论该主机是什么,它都无法在远程路径中找到它。我会检查安装了 pipenv 的远程端的 shell 环境,以确保 PATH 正确。