没有Python的时候Python是什么?

2024-10-04 07:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在我的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获得了条目。

但不管怎样,可能已经解决了,所以谢谢!


Tags: path目录env节点定义libpackagesusr
2条回答

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

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

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

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

我建议你也试试这个

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

希望这有帮助。

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

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

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

相关问题 更多 >