我的系统是 RedHat 5 Linux,默认蟒蛇2.4安装。为了执行Mercurial1.81,我尝试将 Python 从2.4到2.6我以为我把它保存在了不同的目录中。我已将硬链接放在蟒蛇2.6到Python。现在,我删除了它,并希望让python指向蟒蛇2.4以避免版本冲突。
这是我用来删除以下硬链接的命令Python和蟒蛇2.6:
find -xdev -samefile /usr/bin/python | xargs rm
然后我使用以下命令:
ln -s /usr/bin/python2.4 /usr/bin/python
ln -s /usr/bin/python2.6 /usr/local/bin/python
export PATH=/usr/local/bin:$PATH
Change first line of hg to #!/usr/bin/env python
PYTHONHOME=/usr/lib/python2.6
PYTHONPATH=/usr/lib/python2.6
然后,当我输入时whereis python
,结果如下。
/usr/bin/python2.4
/usr/bin/python
/usr/lib/python2.4
/usr/lib/python2.6
/usr/local/bin/python
/usr/include/python2.4
/usr/include/python2.6
/usr/share/man/man1/python.1.gz
然后当我输入时which python
,它指向usr/bin/python
。当我输入时python -V
,它显示python 2.4.3
。它似乎指向2.4.3。然后,当我使用命令
python -c "import sys; print '\n' .join(sys.path)"
这显示了:
/usr/lib64/python24.zip
/usr/lib64/python2.4
/usr/lib64/python2.4/plat-linux2
/usr/lib64/python2.4/lib-tk
/usr/lib64/python2.4/lib-dynload
/usr/lib64/python2.4/site-packages
/usr/lib64/python2.4/site-packages/Numeric
/usr/lib64/python2.4/site-packages/gtk-2.0
/usr/lib/python2.4/site-packages
我试图找到蟒蛇2.6通过输入find / -name python2.6
,它显示
/usr/include/python2.6
/usr/lib/python2.6
/usr/lib64/python2.6
以下是我的问题:
- 我怎样才能将上面的在线结果替换为蟒蛇2.6?
- 为什么我找不到目录,例如
/usr/bin/python2.6
或/usr/local/bin/python2.6
?这是否意味着我安装了蟒蛇2.6错误地或意外地删除了目录?我输入的命令得到的结果有什么问题吗? - 知道如何让系统执行吗蟒蛇2.6当我使用“hg push”时?
- 我应该安装蟒蛇2.6再次在 /usr/local/bin ?
答案1
- 安装虚拟环境和虚拟环境包装器(easy_install 对我来说有效,但不要忘记将该行添加
source /usr/local/bin/virtualenvwrapper.sh
到你的 shell 启动脚本中,然后获取启动脚本以使用包装器) - 运行
mkvirtualenv -p /usr/lib/python2.6 ENVNAME
(ENVNAME
无论你想给它起什么名字,也许都可以hg
?) - 添加
workon ENVNAME
到你的 shell 初始化脚本 (.profile、.*shrc 等)
现在您的系统仍可以使用 2.4,并且您的所有 shell 都将使用 2.6。请小心,因为如果其他系统安装的应用程序的依赖项不在您的虚拟环境中,这可能会中断对它们的调用。但是,由于您现在有了 pip,因此应该很容易pip install $WHATEVER_IS_MISSING
(或运行deactivate
命令退出虚拟环境,执行您的操作,然后workon
返回到原来的位置)。
如果您发现 hg 实例由 shell 之外的进程启动(例如文件管理器集成?)那么我建议将这个小脚本放在您的路径上并配置这些进程来调用它。
#!/bin/bash # or whatever your shell is
workon ENVNAME
hg $*
(请注意,您可以通过在启动脚本中(ENVNAME)
设置该行来禁用该提示)VIRTUAL_ENV_DISABLE_PROMPT
workon