我需要在我的PYTHONPATH
中添加一个新的目录位置,但问题是我在一个干净的、新安装的系统(Linux)中,尚未定义PYTHONPATH
。我读过并使用过PYTHONPATH
,我认为我很理解它,但我不知道当还没有PYTHONPATH
存在时会发生什么。
我不能附加到不存在的东西上,但我希望当前找到的所有重要库都能正常工作,所以要小心,我在Python中通过print str(sys.path)
获得了所有的标准值。然后我为PYTHONPATH
定义了一个env
变量,其中包括我刚刚找到的所有节点,以及我的新目录。但是哇,很多东西都停止工作了!Python被这个新的env
变量搞得一团糟,我不得不删除它,这时一切都恢复了正常。由于有了错误的PYTHONPATH
,系统非常混乱,甚至在提示符下键入不正确的命令时找不到要显示的错误消息。
我的问题不简单,比如缺少冒号,或者在应该使用冒号的时候使用分号;我检查过了。另外,我的新目录不会导致问题,因为即使没有新节点,问题仍然会发生。那么有人能解释为什么这种方法不起作用吗?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面我提供额外的细节要求,但一个不需要阅读任何进一步,我认为问题是固定的。PYTHONPATH中列出的节点并没有覆盖所有“标准”节点,而是成为新的、附加的条目(我相信是前置的,这样人们就可以控制什么是第一个)这一解释是关键。
从头开始,不定义PYTHONHOME或PYTHONPATH,结果是在Python中:
print ':'.join(sys.path)
:/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client
将其用作PYTHONPATH(即,在调用Python之前定义env变量)会导致命令提示符功能非常差,即使没有显式使用Python。例如:
$> export PYTHONPATH='/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client'
$> echo $PYTHONPATH
/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/PIL:/usr/lib/python2.7/dist-packages/gst-0.10:/usr/lib/python2.7/dist-packages/gtk-2.0:/usr/lib/python2.7/dist-packages/ubuntu-sso-client
$> IntentionalBadCommand
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/usr/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Aborted
错误的想法是,Python需要包含整个宇宙所需的一切。是的,我在发帖前做过RTFM,但我想我错过了开头单词“Augment”的意义。所以我建议,并不是所有的东西都需要显式地指定——只需指定所需的额外添加,我尝试了:
$> export PYTHONPATH=/usr/lib/python2.7/dist-packages/postgresql-pkg
$> echo $PYTHONPATH
/usr/lib/python2.7/dist-packages/postgresql-pkg
$> IntentionalBadCommand
IntentionalBadCommand: command not found
虽然我还没有尝试过使用上面提到的postgresql包,但它似乎是可行的。不过,有点神秘的是,为什么在PYTHONPATH前面添加大量不必要的节点会让事情像以前一样糟糕,尤其是因为我从一个应该是可靠的来源:sys.path获得了条目。
但不管怎样,可能已经解决了,所以谢谢!
在Unix系统上,它应该转换成/usr/local/lib/python**其中**是python版本…比如2.7等等。。。
你的答案实际上在于PYTHONPATH和PYTHONHOME变量的定义。
http://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME
默认搜索路径依赖于安装,但通常以前缀/lib/pythonversion开头(请参阅上面的PYTHONHOME)。它总是附加在Python身上。
我建议你也试试这个
希望这有帮助。
不清楚您的问题可能是什么,但请注意,您不需要将
sys.path
的默认值添加到PYTHONPATH
变量中。放入PYTHONPATH
中的目录是要搜索的附加目录;系统默认值附加到PYTHONPATH
。换句话说,粗略地说:显示
PYTHONPATH
的精确值和由此产生的错误将帮助我们确定问题。相关问题 更多 >
编程相关推荐