2013-12-19 229 views
2

基本上,我是一位想学习Python语言的Java程序员。我想澄清为什么一些python库是使用非便携方式分发的。Python可移植性问题

让我解释一下我的想法。

my-great-lib-1.2.4.jar 

我可以用这个LIB(同一个文件),在Windows或Linux的任何版本:如果有人使用Java他准备,可以在不同的平台上使用1(一)JAR文件创建一个规则库。

相反于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 

查看page完整列表。

对我来说这看起来很奇怪。即使32位和64位平台也需要不同的安装程序。安装程序!为什么我需要安装程序才能使用一个库?而且,概述的安装程序仅适用于Windows。它们中的每一个都绑定到特定的python版本。便携性在哪里?

任何人都可以解释上述10个不同文件的必要性吗?

+0

“py”后面的数字适用于不同版本的python。你是否说过只有一种Java版本? – doctorlove

+0

可移植性在C代码中被编译 - 如果你使用像'pip'这样的包管理器,那么你可以为你自己的平台编译它 – Eric

+0

如果我为Java 6编译我的单个jar,它将在java 6上工作,7,8。还是一个罐子。 – tmporaries

回答

0

对于一个python版本跳转。在python 3中,一些内建的语法完全改变了。例如:

raw_input() 

改为:

input() 

还,很多标准库甚至在3.4阿尔法改变。至于32/64位的问题,我不能完全回答。我知道某些平台在尝试运行32/64时会遇到麻烦,这可能就是关键。

1

有许多并发症。在你的代码和字节代码被JVM解释的Java中,只要你的代码被JVM很好地解释,固有的计算机体系结构就不会扮演很多角色。事实上,这是Java变得如此流行的主要原因之一,因为你的代码只应该担心JVM编译的问题。

但是,在Python情况是不同的。我试图总结出一些我认为这是在以下几行重要的原因:

  • 本身是不断变化的(但如果你认为这是在场景中长!),并改变了语言内部发生的语言。新增功能有时候甚至会进行一些语言重塑(Python 2.x到Python 3.x)
  • Python在很大程度上依赖于它的C扩展,所以用Python编写的应用程序也是如此。如果你编写了一个python程序并且有一些CPU密集的代码,你可以选择用C编写它。这也增加了为各种分发创建许多库的必要性。
2

通常,Python库可跨平台移植。不同的主要Python版本之间出现问题(3引入了2的一些重大更改,但2.7向后兼容2.6),或者当您使用C代码优化CPU密集型代码时。在Linux上,当你调用pip安装包时,自己编译并不是问题,它会为你做。问题出现在Windows上,编译C程序要困难得多,特别是因为不是每个人都有编译器。因此,对于Windows,需要C语言包的软件包,通常会得到一个安装程序。

此外,使用安装程序是因为它们设置好所有东西,在注册表中查找放置所有内容的适当位置,提供卸载它们的标准方法(可以使用添加/删除程序删除Chrisopther Goelke站点中的那些在控制面板中),因为这是Windows上的标准:Windows上的大多数程序都是通过exe安装的,因为它没有标准和广泛的软件包管理器。

所有这些库都是可移植的:您可以在任何平台上使用它们,但安装它们会有所不同。

+0

安装它们是不便携的。 – jeremyjjbrown