【发布时间】: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/...——我自己编译的。 -
当然,但这并不意味着您必须被列第一。列出的第二个是非常好。您需要的只是在系统路径之前列出。