更改Python版本以调用两个不同的模块

问题描述:

我有一个简单的程序,其中使用了两个模块,即sqlite3和twython。现在sqlite3用于python2.6,twython用于2.7。所以,如果我改变我的家当线到2.6,然后twyhton失败即更改Python版本以调用两个不同的模块

python2.6 t_first.py 
ImportError: No module named twython 

如果我去做下面

python2.7 t_first.py 
ImportError: No module named _sqlite3 

任何解决方案。 此外virtualenv不是这里最好的解决方案。

+0

你尝试修改'sys.path'(由使用'sys.path.append')指向不能导入的各个模块的位置?我会尝试使用2.7并将'sys.path'指向twython模块。我没有使用twython,但它的github页面声明它与Python 2.6+兼容,所以2.7应该可以工作。 –

sqlite3通常是python的内置函数(在2.6和2.7中)。我建议你安装一个非破坏版本的python 2.7,并将twython安装到网站包中。如果您不想这样做,请将twython安装到2.6站点程序包中。

+0

我最初想到了这一点,并试图从头开始安装,但由于我没有root访问权限,所以很多事情都失败了...... – LonelySoul

+0

@LonelySoul你不需要root权限就可以进行python的私有安装。 – Marcin

+0

谢谢领先。我已经安装了Python2.6,其中sqlite3工作正常。但是,当我通过Shebang调用Python2.6和2.7的可执行文件时,它不起作用。我找到了python命令的可执行文件,它们是/usr/bin/python2.6和/usr/local/bin/python2.7。关于为什么它仍然不能正常工作 – LonelySoul

您可以使用异常处理来管理导入过程。沿线的东西:

try: 
    import twython 
except ImportError: 
    import _sqlite3 

如果你认为你需要在任何情况下存在两个任何一个出现这种工作。如果twython不可用,这将提供twython的优先选择并回退到_sqlite3。这是一个可以接受的逻辑等价于:

if "twython exists" import twython else import _sqlite3 

如果您想更具体的了解,你也可以做以下的环境:

import sys 
if sys.version_info == (2, 6): 
    import _sqlite3 
elif sys.version_info == (2, 7): 
    import twython 
+0

它是如何解决不同版本问题的。似乎更像是错误处理,并犹豫投入生产。 – LonelySoul

+0

@LonelySoul最初的想法为您提供了一个if/then类型的导入选项,它基于哪些模块存在。我更新了一些更详细的python版本的答案,可能更适合你正在寻找的东西。思考? – Troy

+0

问题在于通过shebang行将两个版本都实施。 – LonelySoul