我对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

tcsh文档的变量部分提供了更多信息

其他提示

确保您没有使用 -E 选项启动python(即:忽略环境变量)。如果您通过shell脚本或其他应用程序启动python,只需仔细检查它不会添加任何内容。

由于sys.path列表很长,因此很难错过您的路径。在所有库路径之后,PYTHONPATH通常会被添加到列表的中间位置。你有什么机会在那里,只是埋在中间?

检查:

  1. PYTHONPATH在os.environ,
  2. 并设置为以冒号分隔的路径列表的正确值。
  3. 如果是,并且您可以确认您的路径不在sys.path中,那么您发现了一个错误。

    如果它不在os.environ中,则您的环境不会传递给Python(可能是另一个错误)。

    当然,向我们展示实际的代码/导出,有人会很快告诉你。

当我使用Python 2.5.1 时,即使我在 .cshrc 中正确设置环境 PYTHONPATH ,我也有同样的问题到Python 2.6.2 ,它工作正常。看起来它是一个python bug。

scroll top