python - 由于导入错误,无法同时运行 python 2 和 3

标签 python linux python-2.7 python-3.x rocks

我试图能够在我没有 root 访问权限并且没有最近的 python3 实现的服务器上同时运行 python2 和 python3。这在我自己的服务器上运行良好,我确实有 root 访问权限,但我无法弄清楚我做错了什么。

作为引用,管理员已在相关 centos/rocks 系统上安装了 python2 实现,并且版本有 2.6.6 和 2.7.5。他们还安装了 python 3.3.2,但我使用了 3.4 版本中的一些东西,所以我自定义安装了 3.4.3 版本并将其放入我的 PATH、LIBPATH 和 PYTHONPATH 中。我专门将该 python 版本用于我自己的代码,并使用 pip 安装库。我为 python3 版本创建了自己的自定义 Rocks 模块,用于设置 PATH、LIBPATH 和 LD_LIBRARY_PATH。

当我运行 python3 代码时一切正常。当我尝试在同一 session 中同时运行 python3 和 python2 代码时,问题就出现了。

我已经用 python3 编写了代码,该代码进行系统调用来运行 python2 程序1。问题是,为了运行我的 python3 代码,我将 PYTHONPATH 设置为仅包含 python3 库。如果 python2 库位于该 PATH 中,我会收到类似以下错误:

Failed to import the site module
Traceback (most recent call last):
  File "/opt/scipy/2.7/lib/python2.7/site-packages/site.py", line 73, in <module>
    __boot()
  File "/opt/scipy/2.7/lib/python2.7/site-packages/site.py", line 2, in __boot
    import sys, imp, os, os.path   
  File "/oasis/projects/nsf/sua137/peanut/usr/lib/python3.4/imp.py", line 22, in <module>
    from importlib import util
  File "/oasis/projects/nsf/sua137/peanut/usr/lib/python3.4/importlib/util.py", line 12, in <module>
    from contextlib import contextmanager
  File "/oasis/projects/nsf/sua137/peanut/usr/lib/python3.4/contextlib.py", line 4, in <module>
    from collections import deque
  File "/oasis/projects/nsf/sua137/peanut/usr/lib/python3.4/collections/__init__.py", line 17, in <module>
    from reprlib import recursive_repr as _recursive_repr
  File "/opt/biotools/qiime/lib/python2.7/site-packages/reprlib/__init__.py", line 8, in <module>
    raise ImportError('Cannot import module from python-future source folder')
ImportError: Cannot import module from python-future source folder

但是,如果我从 PYTHONPATH 中删除所有 python2 内容,则 python2 脚本会失败并出现如下错误:

File "/oasis/projects/nsf/sua137/peanut/usr/lib/python3.4/site.py", line 176
file=sys.stderr)
    ^
SyntaxError: invalid syntax

我发现避免这种情况的唯一方法是在对 python2 代码的调用中包含显式 PYTHONPATH。这确实有效,但非常麻烦且丑陋。

我曾经将所有 python3 的内容保留在 PYTHON3PATH 中,将 python2 的内容保留在 PYTHONPATH 中,但现在 python3 似乎完全忽略了 PYTHON3PATH,只使用 PYTHONPATH。

同样,这个问题不会出现在我自己的个人服务器上,该服务器运行 arch linux 并且有 python 3.4 和 python 2.7 愉快地并行运行,即使我的 PYTHONPATH 包含两者的目录。

我确信我在这里做了一些愚蠢的事情,但我不知道那是什么。


1 避免愚蠢评论的脚注:python2 脚本不是我编写的,python3 代码是一个简单的作业管理系统,用于协调远程计算机上的多线程非并行代码。它应该并行运行任何独立程序,但它在 python2 脚本中失败。因此,我不能将其中一个切换到版本 2 或版本 3,也无法通过使用 2to3 和导入来合并这两个版本。

最佳答案

使用显式路径或版本调用 python 解决了该问题。例如:

$ python3.x
$ path_to/python

关于python - 由于导入错误,无法同时运行 python 2 和 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128516/

相关文章:

python - 内存中列表的大小

python - Python中的实时音频处理

python - 为什么 ROS Publisher 不发布值?

python - 为 Django 的管理操作编写测试

linux - 如何在 bash 中将文件内容连接到单个文件中?

python - 如何更改conda base的路径

c++ - 启动程序和libocci.so.11.1 : cannot open shared object file: No such file or directory

python - 需要帮助在 Python 中创建原始套接字

Python While 循环不循环

python - Django REST Framework - 通过路由器将模型传递给 ViewSet