当没有PYTHONPATH时,PYTHONPATH会是什么?

时间:2013-01-25 19:32:19

标签: python linux environment-variables

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

我无法附加不存在的内容,但我希望当前发现的所有重要库仍然可用,因此要谨慎,从Python中我print str(sys.path)获取所有标准值。然后我为env定义了PYTHONPATH - 变量,包括我刚刚找到的所有节点,以及我的新目录。但哇做了很多东西停止工作! 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

错误在于认为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获得条目。

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

2 个答案:

答案 0 :(得分:7)

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

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

显示PYTHONPATH的确切值以及由此产生的错误将有助于我们确定问题。

答案 1 :(得分:1)

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

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

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

默认搜索路径取决于安装,但通常以prefix / lib / pythonversion开头(参见上面的PYTHONHOME)。它总是附加到PYTHONPATH。

我建议你也试试这个

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

希望这有帮助。