python等价于Java .jar文件的是什么?



Java有将所有代码打包到一个称为Jar文件的文件中的概念。Python有类似的想法吗?如果有,是什么?如何打包文件?

Python没有任何与.jar文件完全等价的文件。

有很多不同之处,如果不确切知道你想做什么,就很难解释如何去做。但是Python打包用户指南很好地解释了所有相关的内容。

以下是一些主要的区别。


.jar文件是编译后的类集合,可以放入应用程序中,也可以安装在CLASSPATH上的任何地方。

在Python中

:

  • .py(或.pyc)模块可以放入您的应用程序中,或安装在您的sys.path上的任何地方,并且可以导入和使用。
  • 一个充满模块的目录可以用同样的方式处理;它成为一个包(或者,如果它不包含__init__.py,它将与sys.path上其他相同名称的目录合并为一个包)。
  • 包含任意数量的模块和包的.zip存档可以存储在任何地方,并且它的路径添加到您的sys.path(例如,在运行时或通过PYTHONPATH),其所有内容都可以导入。

最常见的是,您希望将程序安装到系统、用户或虚拟环境的site-packages目录中。推荐的方法是创建一个与pip兼容的包发行版;然后人们通过pip安装它(可能会自动从PyPI或私人repo下载)。

然而,

pip的作用远不止于此。它还允许您管理包之间的依赖关系。所以理想情况下,不要列出一堆需要用户手动下载和安装的先决条件,而是让它们成为依赖项,而用户只需要pip install your-library即可。它可以跟踪你的站点包的状态,这样你就可以卸载或升级一个包,而不必跟踪特定的文件。


同时,在Java中,大多数.jar文件是跨平台的;构建一次,在任何地方运行。一些包有JNI本地代码,不能这样使用,但这不是标准。

在Python中,许多包都有C扩展,必须为每个平台编译,甚至纯Python包通常也需要做一些安装时配置。同时,"编译"纯Python不会做任何在运行时不能做的事情。因此,在Python中,您通常分发包,而不是编译的包。

但是,.wheel是二进制包格式。您可以pip wheel从源包为不同的目标构建二进制包;然后,如果有人试图pip install你的包,如果他的系统有一个轮子,它将被下载并安装。

Easy Install from setup_tools定义了部署Python库或应用程序的.egg格式。虽然与JAR类似,但它在Java世界中没有像JAR那样普及。很多人只部署.py文件。

一个较新的格式,旨在取代eggs,是wheel。

虽然由于可移植性问题,它不是jar的完美替代品,但我会添加"自动提取"存档方式。

一种可能是" makesself ": https://makeself.io/

但是如果你不需要打包外部文件,如果你喜欢KISS方法,下面是一个很好的和干净的选择:

以下内容摘自Asim Jalis的网站

如何将Python应用程序部署为zip文件

创建文件__main__.py,包含:

print "Hello world from Python"

将Python文件(在本例中只有这一个文件)压缩到app.zip中,输入:

zip app.zip *
下一步在zip文件中添加一个shebang,并将其保存为app——此时,文件app是一个包含所有Python源代码的zip文件。
echo '#!/usr/bin/env python' | cat - app.zip > app
chmod 755 app

就是这样。文件app现在有一个压缩的Python应用程序,可以作为单个文件部署。

您可以使用Python解释器运行app,如:

python app

或者您可以直接从命令行运行它:

./app

参考:https://gist.github.com/asimjalis/4237534

最新更新