在没有PYTHONPATH的情况下,什么是PYTHONPATH?

我需要添加一个新的目录位置到我的PYTHONPATH ,但问题是我在一个干净的,新安装的系统(Linux)没有PYTHONPATH尚未定义。 我已经阅读并使用了PYTHONPATH并且我认为我理解的很好,但是当不存在PYTHONPATH时我不知道发生了什么。

我不能附加到不存在的东西,但我希望当前发现的所有重要的库仍然工作,所以要谨慎,从Python内我print str(sys.path)以获得所有的标准值。 然后我为PYTHONPATH定义了一个envvariables,包括我刚才find的所有节点,以及我的新目录。 但是哇有很多东西停止工作! Python是如此混乱的新envvariables,我不得不删除它,在这一点上,一切再次运作。 对于错误的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之前定义一个envvariables),即使没有明确使用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需要包含整个宇宙的所有需要​​。 是的,我在发布之前做了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中获得了条目。

但无论如何,它可能已经解决了,所以谢谢!

Solutions Collecting From Web of "在没有PYTHONPATH的情况下,什么是PYTHONPATH?"

不清楚你的问题可能是什么,但是请注意,你不需要将sys.path的默认值添加到你的PYTHONPATH变量中。 您在PYTHONPATH中放置的目录是要搜索的其他目录; 系统默认会追加到您的PYTHONPATH 。 换句话说,粗略地说:

 sys.path = ":".split( os.environ['PYTHONPATH'] ) + sys.path 

显示PYTHONPATH的确切值和由此产生的错误将帮助我们确定问题。

在Unix系统上,它应该转换为/ usr / local / lib / python **其中**是Python版本…就像2.7等等…

你的答案实际上在于PYTHONPATH和PYTHONHOME变量的定义。

http://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME

默认搜索路径是依赖于安装的,但通常以前缀/ lib / pythonversion开头(请参阅上面的PYTHONHOME)。 它总是附加到PYTHONPATH。

我建议你也试试这个

 import sys sys.path.append('Directory you wanna add to the path') 

希望这可以帮助。