由于导入错误,无法同时 运行 python 2 和 3
Cannot simultaneously run python 2 and 3 due to import errors
我正在尝试能够在我没有 root 访问权限且最近没有 [=42] 的服务器上同时 运行 python2 和 python3 =] 实施。这在我自己的服务器上运行良好,我有根访问权限,但我不知道我做错了什么。
供参考,python2 实施已由管理员安装在有问题的 centos/rocks 系统上,并且他们有版本 2.6.6 和 2.7.5。他们还安装了python 3.3.2,但是我用的3.4版本有些东西,所以我自定义安装了3.4.3版本,并把它放在我的PATH、LIBPATH和PYTHONPATH中。我将 python 版本专门用于我自己的代码,并使用 pip 在其中安装库。我已经为设置 PATH、LIBPATH 和 LD_LIBRARY_PATH.
的 python3 版本创建了自己的自定义 rocks 模块
当我只是 运行宁 python3 代码时一切正常。当我尝试在同一会话中同时 运行 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 并且只使用蟒蛇路径。
同样,这个问题不会发生在我自己的个人服务器上,它 运行 是 linux 并且有 python 3.4 和 python 2.7 运行即使我的 PYTHONPATH 包含两者的目录,也很高兴并排。
我确定我在这里做了一些愚蠢的事情,但我不知道那是什么。
1 避免愚蠢评论的脚注:python2 脚本不是我写的,python3 代码是一个简单的作业管理系统,协调多线程none——远程机器上的并行代码。它应该 运行 任何并行的独立程序,但它因 python2 脚本而失败。所以我不能只将一个或另一个切换到版本 2 或 3,也不能通过使用 2to3 和导入来合并两者。
使用显式路径或版本调用 python 解决了问题。例如:
$ python3.x
$ path_to/python
我正在尝试能够在我没有 root 访问权限且最近没有 [=42] 的服务器上同时 运行 python2 和 python3 =] 实施。这在我自己的服务器上运行良好,我有根访问权限,但我不知道我做错了什么。
供参考,python2 实施已由管理员安装在有问题的 centos/rocks 系统上,并且他们有版本 2.6.6 和 2.7.5。他们还安装了python 3.3.2,但是我用的3.4版本有些东西,所以我自定义安装了3.4.3版本,并把它放在我的PATH、LIBPATH和PYTHONPATH中。我将 python 版本专门用于我自己的代码,并使用 pip 在其中安装库。我已经为设置 PATH、LIBPATH 和 LD_LIBRARY_PATH.
的 python3 版本创建了自己的自定义 rocks 模块当我只是 运行宁 python3 代码时一切正常。当我尝试在同一会话中同时 运行 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 并且只使用蟒蛇路径。
同样,这个问题不会发生在我自己的个人服务器上,它 运行 是 linux 并且有 python 3.4 和 python 2.7 运行即使我的 PYTHONPATH 包含两者的目录,也很高兴并排。
我确定我在这里做了一些愚蠢的事情,但我不知道那是什么。
1 避免愚蠢评论的脚注:python2 脚本不是我写的,python3 代码是一个简单的作业管理系统,协调多线程none——远程机器上的并行代码。它应该 运行 任何并行的独立程序,但它因 python2 脚本而失败。所以我不能只将一个或另一个切换到版本 2 或 3,也不能通过使用 2to3 和导入来合并两者。
使用显式路径或版本调用 python 解决了问题。例如:
$ python3.x
$ path_to/python