ubuntu中python的冲突版本

时间:2013-10-08 11:03:01

标签: python ubuntu

所以我的服务器上有python 2.7.2,我需要将它更新为python 2.7.3。所以我试图删除2.7.2版本,然后使用源安装新版本。我无法删除2.7.2版本因为系统使用它来运行服务器上的关键服务,所以我安装了2.7.3版本,希望之后我能够删除旧版本。仍然我不能删除旧版本,虽然我能够执行python 2.7.3当我安装任何模块我不能导入它。我添加了sys.path的路径,我开始找到模块,但导入它会导致另一个错误。

我的python执行/ usr / local / bin / python这是问题所在的2.7.3版本。 如果我尝试像这样/ usr / bin / python执行python它执行旧版本,一切正常,我可以导入新安装的模块。

那么我该怎么做才能使python 2.7.3工作?

我搜索了很多教程,并尝试了在python上添加.pth文件中的库,我开始找到模块但是在导入时我得到的错误是这样的:

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 9, in <module>
    from numpy.lib import add_newdoc
  File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 4, in <module>
    from type_check import *
  File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 8, in <module>
    import numpy.core.numeric as _nx
  File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 5, in <module>
    import multiarray
ImportError: /usr/local/lib/python2.7/dist-packages/numpy/core/multiarray.so: undefined symbol: PyUnicodeUCS4_AsUnicodeEscapeString

感谢您的帮助

解决了编辑问题

因此,为了解决缺少的导入模块,我在/usr/local/lib/python2.7/site-packages/下创建了一个.pth文件,其中包含python模块所在的目录,python开始查找它们。 要解决可兼容性问题,可以从源代码安装python并指定unicode做./configure --enable-unicode

更多信息here

4 个答案:

答案 0 :(得分:5)

不要混淆系统python,永远。

你应该做的是将带有--prefix的python 2.7.3安装到你的主目录中,然后使用virtualenv -p /home/myuser/path/to/python

在任何情况下,使用virtualenv运行自己的应用程序几乎总是一个好主意,因为它避免使用您在自己的应用程序中使用的库来污染系统包目录。

答案 1 :(得分:2)

您安装的模块似乎是针对旧版本的Python构建的,或者至少是与您的新安装不兼容的版本。您在底部看到的导入错误是numpy模块搜索不在2.7.3版本中的符号。还有其他信息here

如果可能的话,使用软件包管理器升级Python通常会更容易。这样,如果您的系统上的任何内容依赖于Python,但不需要 2.7.2 ,那么Python可以轻松升级而不会打扰任何东西。我猜测您的服务器没有可用的新版本的Python,您无法添加新的存储库,或者您无法访问软件包管理器。如果可以使用包,我会继续删除你从源代码构建的内容(如果Python使用GNU Make,那么命令应该是&#39; make clean&#39;)

如果这不是一个选项,那么应该有一种编译Python的方法,但不能将其安装到系统目录中。然后,您可以为用户添加符号链接,并确保符号链接在其路径中具有优先权。

答案 2 :(得分:2)

安装python时,请使用以下步骤
使用前缀指定安装目录

 ./configure --prefix=/usr/bin/python
 make
 make install

然后每次你运行一个新的终端你都指定了

export PATH="$PATH:/usr/bin/"

告诉Python的安装目录在哪里

这样你可以使用任意数量的蟒蛇

答案 3 :(得分:0)

你可以从R安装python库。它对我有用。

例如,要从R类型安装numpy库:

system('python -m pip install -U numpy')