python会根据我们的情况推出不同的版本

2024-04-25 22:06:47 发布

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

我有一个奇怪的。在同一个solaris10服务器上执行同一python二进制文件的不同用户将获得具有不同模块的不同版本。。在

这一切的开始是因为一个脚本以root用户身份运行良好(找到pexpect模块),但与其他用户一样失败(无法找到pexpect模块)。在

像我一样运行python得到python2.6.4

Sandman HDS1234567 $ python -V
Python 2.6.4
Sandman HDS1234567 $ which python
/opt/csw/bin/python

如果我使用sudo作为根目录,我得到python2.6.8

^{pr2}$

即使用完整路径显式调用python也会显示出相同的奇怪行为。。在

Sandman HDS1234567 $ whoami ; /opt/csw/bin/python -V
mperino
Python 2.6.4

Sandman HDS1234567 $ sudo -s
Password:
bash-3.2# whoami ; /opt/csw/bin/python -V
root
Python 2.6.8

同一个二进制文件怎么可能是两个不同的版本???在


Tags: 模块文件用户版本cswbin二进制sudo
1条回答
网友
1楼 · 发布于 2024-04-25 22:06:47

问题是/opt/csw/bin/python要么是一个链接到libpython2.6.so的最小可执行文件,而没有绝对路径,要么是一个包装器,该可执行文件本身最终链接到没有绝对路径的libpython2.6.so。在

在您的用户环境中,您有一个LD_LIBRARY_PATH集,这将导致/usr/lib/libpython2.6.so被选中。在您的根环境中,您没有,所以选择了一个不同的Python(可能是/opt/csw/lib/libpython2.6.so,但这只是猜测)。而且解释器的大部分内容都在.so,而不是可执行文件中。在

所以,第一个问题是,为什么首先指定LD_LIBRARY_PATH?如果你不需要它,就不要设置它。或者,如果你需要它,为什么根不需要它?在

但是,如果这只是一个解决其他问题的方法,而其他方法无法解决这些问题,那么最简单的解决方案是编写一个别名/函数/脚本,在子shell中运行Python,并酌情使用LD_LIBRARY_PATHset/unset。在

相关问题 更多 >