Python 调用(结构)sys.path 操作

Python invoke (fabric) sys.path manipulation

在更改 sys.path 后,我继承了使用 fabric 执行 运行 命令的代码。这曾经有效。但是现在使用 fabric 2.5 和 python 3.7,我不知道如何在任务中保留对 sys.path 的更改。我有:

fabfile.py

import sys
from fabric import task

sys.path.insert(0, 'blah')
sys.path.append('blarg')
@task
def t(con):
    con.run('python3 tmp.py')

tmp.py

import sys
print(sys.path)

当 运行 宁 fab t 时,blahblarg 都不存在。阅读文档,据我所知,这是一个遗留行为,但新可用的配置、上下文管理器和包装器并没有为我提供改变它的方法,或者至少对我来说不是很明显。有没有办法使用 fabric 实现此目的,还是我需要走另一条路?

如果您实际上不需要一个是前置项,另一个是附加项,您可以通过 the env var:

@fabric.task
def t(con):
    con.run('python3 tmp.py', env={"PYTHONPATH": "blah:blarg"})

在这种情况下,它们都是前缀。