【问题标题】:Prepend sys.path from shell?从 shell 中添加 sys.path?
【发布时间】:2013-11-26 16:26:45
【问题描述】:

如果你想使用给定的python二进制你可以在前面加上PATH

如果你想使用给定的libpython,你可以在前面加上LD_LIBRARY_PATH

现在假设你想使用给定的包目录。我试过PYTHONPATH——但它不起作用:

$ python -c 'import sys; print sys.path[:2]'
['', '/home/boris/.local/lib/python2.7/site-packages']
$ PYTHONPATH="/home/boris/test/lib/python2.7/site-packages" python -c 'import sys; print sys.path[:2]'
['', '/home/boris/.local/lib/python2.7/site-packages']

为了做到这一点,您必须在脚本中执行以下任一操作:

import sys
sys.path.insert(0, "/home/boris/test/lib/python2.7/site-packages")

或者在默认的site-packages 中设置特殊的usercustomize.py 具有相同的内容。

有没有办法从shell修改sys.path

我正在寻找的行为是:

$ python -c 'import sys; print sys.path[:2]'
['', '/home/boris/.local/lib/python2.7/site-packages']
$ your-shell-command
$ python -c 'import sys; print sys.path[:2]'
['/home/boris/test/lib/python2.7/site-packages', '']

编辑

如果目录是第二个,我看不出有什么害处:

['', '/home/boris/test/lib/python2.7/site-packages']

但是

~: PYTHONPATH="/home/farhad" python -c 'import sys; print sys.path[:2]'
['', '/home/boris/.local/lib/python2.7/site-packages']

对我不起作用。可能是因为我有usercustomize.py(在系统范围的库之前我还想要~/.local 库)。

【问题讨论】:

  • 为什么需要覆盖''?本地目录排在第一位是有原因的。
  • @MartijnPieters:嗯,anaconda 在自定义目录中提供了更快的 numpy,但我不想一直使用。所以我写了一个shell命令,它将系统python和libs切换到anaconda的python和libs。
  • 当前的行为如何阻止您这样做? numpy 没有安装在当前目录中,是吗? (请注意,第一个 sys.path 条目始终是正在运行的脚本的目录)。
  • @MartijnPieters: 安装在~/.local/...——我自己编译的。
  • 当然,但这并不意味着您必须被列第一。列出的第二个是非常好。您需要的只是在系统路径之前列出。

标签: python shell path


【解决方案1】:

在我看来,您在 cmets 中描述的特定用例将通过将 ~/.local/.../numpy 设为符号链接,然后更改该符号链接而不是直接更改导入路径来涵盖。

【讨论】:

  • 是的。你的方式的问题是,我不仅需要 numpy,还需要其他一些库(scipy、sympy、matplotlib)等。我可以在那里制作几个 usercustomize.py 并使用 shell 函数在它们之间切换(重命名其中一个usercustomize.py~ 可互换)。我确实做到了,但现在希望有更好的解决方案。
【解决方案2】:

对我有用:

$PYTHONPATH="/home/farhad" python -c 'import sys; print sys.path[:2]'
['', '/home/farhad']
$

【讨论】:

  • OP 不希望它排在第二位,而是 first,所以在 ''(脚本目录)条目之前。
  • 因为答案没有帮助。 OP 明确描述了错误和正确的结果是什么,并且您向 OP 提供了已经发现不受欢迎的结果。
  • 可能是我读错了;我现在看到 OP 正在谈论不同的路径,不确定是否还有其他问题。
猜你喜欢
  • 2021-12-13
  • 1970-01-01
  • 2013-04-13
  • 2017-11-27
  • 2015-10-03
  • 2019-03-14
  • 1970-01-01
  • 2015-12-18
相关资源
最近更新 更多