什么是相当于Java .jar文件的python?

时间:2014-08-22 21:45:42

标签: python

Java的概念是将所有代码打包到一个名为Jar文件的文件中。 Python有相同的想法吗?如果是这样,它是什么?如何打包文件?

3 个答案:

答案 0 :(得分:21)

Python与.jar文件没有任何确切的等价物。

存在许多差异,如果不确切地知道自己想要做什么,就很难解释如何做到这一点。但是Python Packaging User Guide在解释几乎所有相关内容方面做得非常好。

以下是一些主要差异。


<。> .jar文件是一个已编译的类集合,可以放到您的应用程序中,也可以安装在CLASSPATH的任何位置。

在Python中:

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

最常见的是,您希望将事物安装到系统,用户或virtualenv site-packages目录中。建议的方法是创建一个pip兼容的软件包分发;然后人们通过pip安装它(并可能从PyPI或私人仓库自动下载)。

然而,

pip做的远远不止于此。它还允许您管理包之间的依赖关系。因此,理想情况下,您不必列出一些必须要手动下载和安装的先决条件,而是将它们作为依赖项,而只需要pip install your-library。它会跟踪您的站点包的状态,因此您可以卸载或升级包,而无需追踪特定文件。


同时,在Java中,大多数.jar文件是跨平台的;建立一次,随处运行。一些软件包具有JNI本机代码,不能以这种方式使用,但这不是常态。

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

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

答案 1 :(得分:6)

Easy Install from setup_tools定义了用于部署Python库或应用程序的.egg格式。虽然与JAR类似,但它在Java世界中普遍存在于JAR中。许多人只是部署.py个文件。

用于取代鸡蛋的新格式为wheel

答案 2 :(得分:2)

尽管由于可移植性问题,它不是jar的完美替代品,但我将添加“自动提取”存档方式。

一种可能性是“ makeself”:https://makeself.io/

但是,如果您不需要打包外部文件,并且如果您喜欢KISS方法,则以下是一种不错的选择:

以下内容摘自Asim Jalis的website

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

创建一个文件__main__.py,其中包含:

print "Hello world from Python"

通过键入以下内容将Python文件(在本例中为该文件)压缩为app.zip

zip app.zip *

下一步,在压缩文件中添加一个 shebang 并将其另存为app-此时,文件app是一个包含所有Python源代码的压缩文件。

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