如何导入用其他版本的python编写的程序?

如何导入用其他版本的python编写的程序?,python,python-3.x,compatibility,python-2.x,Python,Python 3.x,Compatibility,Python 2.x,我有一个用Python2.7编写的python脚本,但想将其导入用3.5编写的python脚本,如何确保python脚本知道要使用哪个python版本来读取脚本 谢谢 如果您的python环境使用python 3.5,那么当您调用脚本时,它将与环境的python版本(即3.5)一起运行 如果您正在调用的脚本与Python3.5不兼容,您可能会遇到错误,或者更糟糕的是,可能会遇到意外的结果,这些结果可能更难捕获,请参阅下面的部分 python 2和3之间不兼容的常见原因包括但不限于: 使用prin

我有一个用Python2.7编写的python脚本,但想将其导入用3.5编写的python脚本,如何确保python脚本知道要使用哪个python版本来读取脚本


谢谢

如果您的python环境使用python 3.5,那么当您调用脚本时,它将与环境的python版本(即3.5)一起运行

如果您正在调用的脚本与Python3.5不兼容,您可能会遇到错误,或者更糟糕的是,可能会遇到意外的结果,这些结果可能更难捕获,请参阅下面的部分

python 2和3之间不兼容的常见原因包括但不限于:

使用printhello python 2.7代替printhello python 3, 使用xrange python 2.7代替range python 3, 9/4产生2.7版Python2.7,而产生2.25版Python3。 1.使脚本在python 2和python 3中无缝工作 如果希望Python2.7脚本与Python3.5兼容,应该确保它符合Python3标准

来自未来导入打印功能 来自未来进口部 从六点开始,移动输入范围 有关使python 2和3代码协同工作的更多信息,请查看的文档

2.将旧的Python2脚本转换为Python3可能与Python2不向后兼容 如果要将Python2脚本转换为Python3,可以使用,但要小心

让我们看一下这个简单的python 2.7代码片段:

# foo.py
for i in xrange(10):
    print i
调用2to3 foo.py-w时,foo.py变为:


如果您的目标是从现在起仅将foo.py用于Python3,那么2to3是一个不错的解决方案,尽管它并不能解决所有问题。但是,如果您希望继续将脚本与Python2.7一起使用,这可能会有问题。例如,与xrange相比,Python2.7中使用range的效率非常低。

您不能简单地导入Python2代码,除非它是专门编写的与Python2/3兼容的代码,这并不少见

通常的建议是,如果Python 3无法运行Python 2脚本,则将其升级为Python 3。标准库2to3可以帮助实现这一点,并且有第三方工具可以使这一点变得更加简单,例如对于一个简短的脚本,我支持这一建议

然而,这不是唯一的办法

第二个选项:您可以在从Python3启动的子流程中运行Python2下的Python2脚本。您可以使用序列化数据(如JSON或旧的pickle协议)在进程之间进行通信。这需要在Python2中编写一些粘合代码来帮助来回传递数据。如果您只需要一个大型Python2程序的小型接口,那么这可能比将整个程序升级到Python3更容易

第三种选择是对这两个脚本使用以前称为非官方的Python 2.8。Tauthon与Python 2代码完全兼容,但添加了许多您可能需要的Python 3特性。这样,您就必须将Python3代码调整为Tauthon,而不是将Python2代码调整为Python3。根据两个代码库的相对大小和复杂性,这可能是更容易的选择,特别是因为Tauthon已经支持您可能使用的大多数Python 3功能

最后,您可以使用工具在导入时自动将脚本转换为Python 3,如。这可能与您要求的最接近,但我没有发现此类工具非常可靠。这种方法实际上并不比将脚本转换为Python3简单,但是如果其他人正在维护它,它可能会使升级更容易,因为您不必自己重新转换它。此外,您可以继续从Python 2和Python 3程序中使用相同版本的Python 2脚本,即使在进行更改时,也不必制作2/3兼容的脚本。您的里程数可能会有所不同。

您可以探索这一点
# foo.py
for i in range(10):
    print(i)