使用python解释器的virtualenv比系统范围的解释器更新

时间:2016-04-17 04:18:56

标签: python python-2.7 gtk virtualenv pygtk

编辑:如果您将此问题投票为重复,请至少花点时间阅读问题,而不是仅仅将其标记为重复,因为它看起来有点类似于另一个问题。如果你愿意这样做,你会立即意识到它不是重复的。我只是想展示一些更广泛的背景。

我的发行版仍然使用Python 2.6作为python解释器。现在我想使用一个需要Python 2.7的模块。我安装了Python 2.7,但它会破坏其他应用程序。所以我用Python 2.7设置了一个虚拟环境作为解释器:

virtualenv -p ~/pkg/bin/python2.7 venv

如果我激活虚拟环境并运行python,则使用新的解释器。好!现在我需要import个模块,例如

import gtk

这在全局范围内工作(即在Python 2.6中),但不在我的虚拟环境中(即在Python 2.7中)。我试图为虚拟环境设置sys.path相同,但这会给我带来错误,例如

  

ImportError:/usr/lib64/python2.6/site-packages/gtk-2.0/glib/_glib.so:undefined symbol:PyUnicodeUCS4_DecodeUTF8

有点期待。

使用

进行搜索
pip search gtk

也不会导致任何结果。我现在最好的猜测是我必须从源代码安装gtk,并针对Python 2.7进行编译。然而,这引入了其他依赖关系并且在那个洞中走了大约7或8步,我辞职了。

有没有更简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

首次激活虚拟环境后,您需要安装所需的任何软件包(例如,pip install pep8-naming

创建虚拟环境时,它基本上作为python的单独独立安装。如果您之前在全局Python 2.6实例中安装了gtk(或任何其他软件包),则在Python 2.7虚拟环境中不可用。

相反,您需要在切换到环境后重新安装任何所需的软件包。

例如,在我的Mac上,默认系统python是2.7

$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

但我安装了许多蟒蛇:

$ python <tab><tab>
python             python2.7-32       python3.2m-config  python3.4m         pythonw2.7-32
python-32          python2.7-config   python3.3          python3.4m-config  pythonw3
python-config      python3            python3.3-32       pythontex          pythonw3-32
python2            python3-32         python3.3-config   pythonw            pythonw3.2
python2-32         python3-config     python3.3m         pythonw-32         pythonw3.2-32
python2-config     python3.2          python3.3m-config  pythonw2           pythonw3.3
python2.6          python3.2-32       python3.4          pythonw2-32        pythonw3.3-32
python2.6-config   python3.2-config   python3.4-32       pythonw2.6         
python2.7          python3.2m         python3.4-config   pythonw2.7         

如果我创建一个新的virtualenv,你可以看到它只安装了最小的包

$ mkvirtualenv -p `which python3.4` test
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Installing setuptools, pip, wheel...pdone.
$ pip list
pip (7.1.2)
setuptools (18.2)
wheel (0.24.0)