PYTHONPATH - 针对不同的python安装动态?

时间:2011-10-03 18:08:37

标签: python pythonpath

在我的CentOS5服务器上,我有Python2.4和2.6(yum需要2.4才能工作)。我不确定发生了什么,但每次我尝试运行一个模块加载到2.4 site-packages目录的文件时,系统突然变得非常混乱。我查看了PYTHONPATH / sys.path,看起来所有内容都被2.6环境数据覆盖了。

它不习惯这样做。我只是在脚本开头的shebang语句中声明/ usr / bin / python或/ usr / bin / python26,它总能找到正确的模块。

PYTHONPATH变量是否有可能是动态的,并根据运行的python解释器加载不同的路径?

否则我将不得不在每个应用程序中手动编辑路径,这看起来有点过分。

在安装web.py之后开始(顺便说一下,我喜欢这个。)

回溯: 正如下面有人评论的那样,我将shebang更改为#!/ usr / bin / env python这个程序:

Traceback (most recent call last):
  File "/usr/bin/linkchecker", line 24, in ?
    import codecs
  File "/usr/lib/python2.6/codecs.py", line 268
    return (b"", 0)
              ^

另一个例子,试图使用yum:

Traceback (most recent call last):
  File "/usr/bin/yum", line 5, in ?
    import yum
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 21, in ?
    import os
  File "/usr/lib/python2.6/os.py", line 758
    bs = b""
           ^

我注意到有两个程序没有被b“”语法混淆,所有这些程序都是使用2.4的程序,出于某种原因使用2.6。如果我尝试让程序使用2.6解释器,它能够理解该语法,但是找不到任何其他模块(位于2.4 site-packages目录中)。

我不知道那个语法是什么,因为它们被编写到我从sourceforge获得的模块中,但是他们上周正在工作。我不确定发生了什么变化。

谢谢, 汤姆

2 个答案:

答案 0 :(得分:2)

首先,使用virtualenv隔离多个Python安装的包。你的大多数问题都会立即消失。

其次,正如Ibp在他的回答中所建议的,更改shebang行以使用“当前活动的”python二进制文件,以便它可以在多个解释器中工作。

答案 1 :(得分:1)

而不是使用shebang(文件的第一个字节)

#!/usr/bin/python

使用shebang

#!/usr/bin/env python

编辑:我是第二个Noufal建议使用virtualenv。