【问题标题】:Append *multiple* paths to PYTHONPATH in fish在fish中将*多个*路径附加到PYTHONPATH
【发布时间】:2016-05-24 11:13:07
【问题描述】:

Here我读到了如何在fish中追加到PYTHONPATH,这对于一个字符串来说效果很好。

但是,如果我这样做:

set --export PYTHONPATH $PYTHONPATH path1 path2

我明白了:

>> import os
>> os.environ["PYTHONPATH"]
'path1\x1epath2'

或者:

$ python -c "import os; print os.environ['PYTHONPATH']"
path1path2

这里有什么问题?

【问题讨论】:

    标签: python environment-variables fish


    【解决方案1】:

    如果您使用的是 fish 2.2.0(或刚刚发布的 2.3.0),则只有三个 env var 会自动拆分并由冒号连接:PATH、MANPATH、CDPATH。所有其他“路径”列表环境变量都被视为单元素数组,除非您像示例中那样将它们显式设置为多个值。但是,如果在导出它们时这样做,则值将由 ASCII RS (0x1E) 字符分隔。您应该像在 bash、zsh 等中一样处理 PYTHONPATH。

    fish 项目有几个问题悬而未决,我们正在讨论对这些变量的处理可能进行的改进。见

    https://github.com/fish-shell/fish-shell/issues/2090

    https://github.com/fish-shell/fish-shell/issues/1656

    https://github.com/fish-shell/fish-shell/issues/436

    【讨论】:

      【解决方案2】:

      您可以通过冒号分隔环境变量中的路径来设置多个路径。我不使用鱼,但例如在 ZSH 中,我会这样做:

      $ export PYTHONPATH=/path/to/foo:/path/to/bar
      $ python -c "import sys; print sys.path"
      ['', '/path/to/foo', '/path/to/bar', ...
      

      【讨论】:

      • 这对我不起作用。尝试set --export PYTHONPATH $PYTHONPATH "path1;path2" 并获得"path1;path2" 作为单一路径。在 fish 中,通常通过空格分隔来设置多个元素。
      • 是的,但鱼不一定使用那些环境变量。如果 python 需要冒号分隔的字符串,请使用set -x PYTHONPATH "$PYTHONPATH:path1:path2"
      • @Xiphias 冒号分隔,而不是分号。它将作为单个环境变量出现在os.environ 中(毕竟它只是一个),但它将作为两个项目添加到sys.path(无论如何这都是我们想要的)。
      • @glennjackman 谢谢,您的评论应该是这里接受的答案!
      【解决方案3】:

      Fish 在即将发布的 3.0 版本中提供了一种新机制来处理此问题。

      更多信息请查看以下 PR:https://github.com/fish-shell/fish-shell/pull/5245

      【讨论】:

        猜你喜欢
        • 2012-05-23
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        • 2016-06-03
        • 2012-05-31
        • 2018-09-12
        相关资源
        最近更新 更多