Python可移植性问题
基本上,我是一名想要学习Python语言的Java程序员。我想澄清为什么一些python库使用不可移植的方式分发 让我解释一下我的想法。如果有人使用Java创建常规库,他会准备1(一)个可在不同平台上使用的JAR文件:Python可移植性问题,python,jar,pip,portability,easy-install,Python,Jar,Pip,Portability,Easy Install,基本上,我是一名想要学习Python语言的Java程序员。我想澄清为什么一些python库使用不可移植的方式分发 让我解释一下我的想法。如果有人使用Java创建常规库,他会准备1(一)个可在不同平台上使用的JAR文件: my-great-lib-1.2.4.jar 我可以在任何版本的Windows或Linux上使用这个库(相同的文件) 与Java不同,python库可能如下所示: bsdiff4-1.1.4.win-amd64-py2.5.exe bsdiff4-1.1.4.win-amd64
my-great-lib-1.2.4.jar
我可以在任何版本的Windows或Linux上使用这个库(相同的文件)
与Java不同,python库可能如下所示:
bsdiff4-1.1.4.win-amd64-py2.5.exe
bsdiff4-1.1.4.win-amd64-py2.6.exe
bsdiff4-1.1.4.win-amd64-py2.7.exe
bsdiff4-1.1.4.win-amd64-py3.2.exe
bsdiff4-1.1.4.win-amd64-py3.3.exe
bsdiff4-1.1.4.win32-py2.5.exe
bsdiff4-1.1.4.win32-py2.6.exe
bsdiff4-1.1.4.win32-py2.7.exe
bsdiff4-1.1.4.win32-py3.2.exe
bsdiff4-1.1.4.win32-py3.3.exe
请参阅上的完整列表
我觉得很奇怪。即使是32位和64位平台也需要不同的安装程序。安装工!为什么我需要安装程序才能使用一个库?此外,概述的安装程序仅适用于Windows。它们中的每一个都绑定到特定的python版本。便携性在哪里
有谁能解释一下上面10个不同文件的必要性吗?对于一个python版本,请随意选择。在Python3中,一些内置的语法完全改变了。例如:
raw_input()
改为:
input()
而且,即使在3.4的alpha版本中,很多标准库也发生了变化。至于32/64位的问题,我无法完全回答。我知道某些平台在尝试运行32/64时会遇到问题,这可能就是问题所在。有很多复杂问题。在Java中,代码和字节代码由JVM解释,只要代码由JVM很好地解释,固有的计算机体系结构就不起作用。事实上,这是Java如此流行的主要原因之一,因为您的代码只需要担心JVM是否正确编译 然而,在Python中情况是不同的。我试图在以下几行中总结一些我认为重要的原因:
- 语言本身正在进化(尽管你认为它在场景中很长!),语言内部正在发生变化。添加了新特性,有时甚至对语言进行了一些重构(从Python 2.x到Python 3.x)
- Python严重依赖其C扩展,用Python编写的应用程序也是如此。如果您编写了一个python程序,并且有一些CPU密集型代码,那么您可以选择用C编写。这还增加了为各种发行版创建大量库的必要性
所有这些库都是可移植的:您可以从任何平台使用它们,但安装它们是不同的
py
后面的数字用于不同版本的python。你是说Java只有一个版本吗?可移植性在于编译这些代码的C代码中——如果你使用像pip
这样的包管理器,那么你可以为自己的平台编译它。如果我为Java 6编译我的单个jar,它将在Java 6、7、8上工作。还有一个罐子。安装它们是不可移植的。