将*多个*路径附加到fish中的PYTHONPATH

问题描述 投票:0回答:4

这里我读到了如何在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
4个回答
2
投票

如果您使用的是fish 2.2.0(或刚刚发布的2.3.0),则只有三个环境变量会自动用冒号分隔和连接: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


0
投票

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

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

0
投票

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

请参阅以下 PR 了解更多信息:https://github.com/fish-shell/fish-shell/pull/5245


0
投票

正如@Yichuan Wang正确指出的那样,在3.0.0版本中,Fish shell引入了一种处理路径变量的新方法(例如,

PYTHONPATH
CDPATH
LD_LIBRARY_PATH
等)。

要设置路径变量,请使用:

set -gx PYTHONPATH path1 path2

由于它以

PATH
结尾,fish 会自动假定它是一个 path-type 变量。例如,它将负责添加分隔冒号。 如果您想在 Fish 会话中保留此设置,请将此命令添加到 config.fish

如果你想修改

PATH
变量,可以使用方便的函数fish_add_path

fish_add_path /opt/some_app/bin

如果您希望在当前 shell 或 shell 重新启动之间保持持久性,请使用

-U

© www.soinside.com 2019 - 2024. All rights reserved.