基本上,我是一名想要学习Python语言的Java程序员。我想澄清一下为什么有些python库使用不可移植的方式进行分发。
让我解释一下我的想法。如果有人使用Java创建了一个常规库,他会准备一(一)个JAR文件,可以在不同的平台上使用:
my-great-lib-1.2.4.jar
我可以在任何版本的Windows或Linux上使用这个lib(同一个文件)。
与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库可以跨平台移植。不同的主要Python版本之间会出现问题(3从2引入了一些大的更改,但2.7与2.6向后兼容),或者当您使用C代码来优化CPU密集型代码时。在Linux上,自己编译它不是问题,当你调用pip安装包时,它会帮你完成。问题出在Windows上,编译C程序要困难得多,尤其是因为不是每个人都有编译器。所以,对于Windows,那些需要C语言的软件包,你通常会得到一个安装程序。
此外,之所以使用安装程序,是因为它们设置得很好,在注册表中查找合适的位置来放置所有东西,提供了一种标准的卸载方式(可以使用"控制面板"中的"添加/删除"程序删除Chroisopher Goelke网站上的程序),而且因为这是Windows上的标准:Windows上的大多数程序都是通过exe安装的,因为它没有一个标准的、广泛的包管理器。
所有这些库都是可移植的:您可以在任何平台上使用它们,但安装它们是不同的。
有许多并发症。在Java中,JVM先解释代码,然后解释字节码,只要JVM能很好地解释代码,那么固有的计算机体系结构就不会发挥很大作用。事实上,这也是Java如此流行的主要原因之一,因为您的代码只需要担心JVM是否正确编译。
然而,在Python中的情况就不同了。我试图在以下几行中总结一些我认为重要的原因:
- 语言本身正在发展(尽管如果你想的话,它在场景中很长!),语言内部正在发生变化。添加了新功能,有时甚至对语言进行了一些重构(从Python 2.x到Python 3.x)
- Python在很大程度上依赖于它的C扩展,用Python编写的应用程序也是如此。如果你写了一个python程序,并且有一些CPU密集型代码,你可以选择用C来写。这也增加了为各种分发创建大量库的必要性
对于一个python版本,请跳来跳去。在python 3中,一些内置的语法完全改变了。例如:
raw_input()
更改为:
input()
此外,许多标准库甚至在3.4的alpha版本中也发生了变化。至于32/64位的问题,我不能完全回答。我知道某些平台在尝试运行32/64时会遇到问题,这可能就是问题所在。