题
我对tcsh没有多少经验,但我对学习很感兴趣。我一直在让Python看到PYTHONPATH。我可以回显$ PYTHONPATH,这是正确的,但是当我启动Python时,我的路径不会出现在sys.path中。有什么想法吗?
编辑:
[dmcdonal@tg-steele ~]$ echo $PYTHONPATH
/home/ba01/u116/dmcdonal/PyCogent-v1.1
>>> from sys import path
>>> from os import environ
>>> path
['', '/apps/steele/Python-2.5.2/lib/python2.5/site-packages/setuptools-0.6c8-py2.5.egg', '/apps/steele/Python-2.5.2/lib/python2.5/site-packages/FiPy-2.0-py2.5.egg', '/apps/steele/Python-2.5.2', '/apps/steele/Python-2.5.2/lib/python25.zip', '/apps/steele/Python-2.5.2/lib/python2.5', '/apps/steele/Python-2.5.2/lib/python2.5/plat-linux2', '/apps/steele/Python-2.5.2/lib/python2.5/lib-tk', '/apps/steele/Python-2.5.2/lib/python2.5/lib-dynload', '/apps/steele/Python-2.5.2/lib/python2.5/site-packages', '/apps/steele/Python-2.5.2/lib/python2.5/site-packages/Numeric']
>>> environ['PYTHONPATH']
'/apps/steele/Python-2.5.2'
解决方案
你是如何设置PYTHONPATH的?你可能会混淆tcsh的设置与setenv。使用“设置”设置tcsh调用 shell变量并使用“setenv”设置环境变量。因此,您需要使用setenv才能让Python看到它。例如:
$ set FOO='bar'
$ echo $FOO
bar
$ python -c 'import os; print os.getenv("FOO")'
None
$ setenv BAR 'wiz'
$ echo $BAR
wiz
$ python -c 'import os; print os.getenv("BAR")'
wiz
其他提示
确保您没有使用 -E
选项启动python(即:忽略环境变量)。如果您通过shell脚本或其他应用程序启动python,只需仔细检查它不会添加任何内容。
由于sys.path列表很长,因此很难错过您的路径。在所有库路径之后,PYTHONPATH通常会被添加到列表的中间位置。你有什么机会在那里,只是埋在中间?
检查:
- PYTHONPATH在os.environ,
- 并设置为以冒号分隔的路径列表的正确值。 醇>
如果是,并且您可以确认您的路径不在sys.path中,那么您发现了一个错误。
如果它不在os.environ中,则您的环境不会传递给Python(可能是另一个错误)。
当然,向我们展示实际的代码/导出,有人会很快告诉你。
当我使用Python 2.5.1
时,即使我在 .cshrc
中正确设置环境 PYTHONPATH
,我也有同样的问题到Python 2.6.2
,它工作正常。看起来它是一个python bug。
不隶属于 StackOverflow