我需要将一个新的目录位置添加到我的
我无法附加到不存在的内容,但我希望所有重要的库仍然能够工作,因此,小心起见,我从Python中执行
我的问题不像缺少冒号或者应该使用分号而使用冒号这样简单;我检查过了。而且我的新目录也不会引起问题,因为即使没有新节点,问题仍然存在。那么有人能解释一下为什么这种方法不起作用吗?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
如下提供额外的细节,但不需要读得太深入,我认为问题已经解决了。列表中列出的节点并不会覆盖所有“标准”节点,而是成为新的附加条目(我相信是预先设置的,所以可以控制哪个先出现)是关键。
从头开始,不定义任何PYTHONHOME或PYTHONPATH,在Python中得到以下结果:
错误的想法是认为PYTHONPATH需要包含所需的所有东西的整个宇宙。是的,我在发布之前已经阅读了文档,但我猜我错过了“增加”一词的重要性。因此,采纳了一个建议:不需要明确指定所有内容,只需指定想要的额外添加项,我尝试了:
PYTHONPATH
中,但问题是我正在一台干净的、新安装的系统(Linux)上,在这里没有定义任何PYTHONPATH
。我已经阅读并使用了PYTHONPATH
,我认为我很了解它,但当没有PYTHONPATH
时,我不知道发生了什么。我无法附加到不存在的内容,但我希望所有重要的库仍然能够工作,因此,小心起见,我从Python中执行
print str(sys.path)
以获取所有标准值。然后,我为PYTHONPATH
定义了一个env
-变量,包括我刚才找到的所有节点和我的新目录。但哇,很多东西都停止工作了!Python混乱了,因为有了新的env
-变量,我不得不删除它,此时一切都恢复正常。有了糟糕的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之前定义一个环境变量)使用会导致命令提示符的功能非常差,即使没有显式地使用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
错误的想法是认为PYTHONPATH需要包含所需的所有东西的整个宇宙。是的,我在发布之前已经阅读了文档,但我猜我错过了“增加”一词的重要性。因此,采纳了一个建议:不需要明确指定所有内容,只需指定想要的额外添加项,我尝试了:
$> 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)中获取了这些条目。
但无论如何,问题可能已经解决了,所以谢谢!
---
而不是一行%
字符,它会自动插入一个带有间距的水平线。 - abarnert