可能存在冲突的Python安装

14 投票
2 回答
18308 浏览
提问于 2025-04-17 19:03

我不太确定我安装的模块是不是在默认的 Python 安装上,可能这就是导致我遇到的 Unicode 字节大小兼容性错误的原因。简单来说,我用 Python 2.7.3 安装了 Numpy 1.7,但当我尝试安装另一个需要 Python 和 Numpy 的程序时,就出现了这个错误:

Traceback (most recent call last):
  File "setup.py", line 20, in <module>
    from weblogolib import __version__
  File "/home/chris/Documents/IS/Bioinformatics-Software/weblogo-3.3/weblogolib/__init__.py", line 108, in <module>
    from numpy import array, asarray, float64, ones, zeros, int32,all,any, shape
  File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 137, in <module>
import add_newdocs
  File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 9, in <module>
from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 4, in <module>
from type_check import *
  File "/usr/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 8, in <module>
import numpy.core.numeric as _nx
  File "/usr/lib/python2.7/dist-packages/numpy/core/__init__.py", line 5, in <module>
import multiarray
ImportError: /usr/lib/python2.7/dist-packages/numpy/core/multiarray.so: undefined symbol: PyUnicodeUCS4_AsUnicodeEscapeString

所以我猜我遇到了字节大小冲突(2 字节和 4 字节)。我去检查了一下,看看是否有不同版本的 Python 在搞混。

python --version
Python 2.7.3

但这似乎和我找到的情况不太一致。

which python
/usr/local/bin/python

当我去 /usr/local/bin 时,发现了一些与 Python 相关的文件:

python
python2
python2.7
python-config
python2-config
python2.7-config

现在我已经把 Numpy 安装到了 /usr/lib/python2.7/dist-packages 的 dist-packages 目录,这和我用 python --version 得到的版本是对应的。但是,当我用 which python 命令时,得到的是一个指向 python 的目录,而不是 python2.7,这让我担心在安装需要 Python 和 Numpy 的程序时可能会出现冲突。

所以我想澄清一下我的问题:这些文件是 Python 安装中正常会出现的吗?还是说我不小心安装了三个不同的版本?它们会导致我遇到的未识别符号错误吗?如果它们确实是多余的版本,有没有办法卸载它们?

谢谢你能提供的任何帮助!

哦,还有一个链接是我之前问过的问题,关于我在尝试修复一个 ImportError 时编辑了 PYTHONPATH,不知道这是否会影响到其他事情……ImportError: No module named numpy

这是我尝试使用 virtualenv 的结果:

chris@ubuntu:~/Documents/IS/Bioinformatics-Software$ virtualenv weblogo-3.3
New python executable in weblogo-3.3/bin/python
Installing setuptools.............done.
Installing pip...............done.
chris@ubuntu:~/Documents/IS/Bioinformatics-Software$ cd weblogo-3.3
chris@ubuntu:~/Documents/IS/Bioinformatics-Software/weblogo-3.3$ source bin/activate
(weblogo-3.3)chris@ubuntu:~/Documents/IS/Bioinformatics-Software/weblogo-3.3$ pip install numpy
Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages
Cleaning up...

2 个回答

1

你用的是什么操作系统?这个问题更适合在超级用户论坛问,不过你可以试试这个方法。先把 easy_install 放一边,如果你还没用过的话,改用 pip

在Ubuntu系统上:

sudo apt-get install python-setuptools 
sudo easy_install pip 
pip install --user numpy
13

这个问题看起来是因为Python和Numpy的编译设置不匹配。

/usr/local/bin是你安装自定义Python的地方,你可以试着用/usr/bin/python来运行。

另外一个解决办法是使用虚拟环境(virtualenv)。你可以试试这个:

virtualenv myproject
cd myproject
source bin/activate
pip install numpy

简单来说,虚拟环境会在“myproject”目录下设置一个不同的Python安装,并且有自己的包。运行“activate”命令就是告诉系统你想用这个安装,而不是默认的系统Python。这样你就可以为不同的项目创建不同的Python环境。使用虚拟环境后,每个项目可以有自己的Python包版本,即使这些版本和其他项目或系统包不兼容。

需要注意的是,每次你打开一个新的命令行窗口并想使用这个虚拟环境时,都需要重复运行“source”命令。此外,你可能需要通过操作系统的包管理器来安装virtualenv命令。如果这不行(比如你没有管理员权限)或者你的操作系统版本太旧,你也可以从https://pypi.python.org/packages/source/v/virtualenv/手动下载。

如果你运行ls -l /usr/local/bin/python*,你应该能看到python和python2实际上是指向python2.7的符号链接,python-config和python2-config也是指向python2.7-config的符号链接。

撰写回答