Java 的概念是将所有代码打包到一个称为 Jar 文件的文件中。 Python 有没有等价的想法?如果是这样,它是什么?如何打包文件?
最佳答案
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 或私有(private)仓库自动下载)。
pip
的作用远不止于此。它还允许您管理包之间的依赖关系。因此,理想情况下,与其列出一堆必须手动下载和安装的先决条件,不如让它们成为依赖项,然后有人只需 pip install your-library
。它会跟踪您的站点包的状态,因此您可以卸载或升级包,而无需跟踪特定文件。
同时,在 Java 中,大多数 .jar
文件都是跨平台的;构建一次,随处运行。少数包有 JNI 原生代码,不能这样使用,但这不是常态。
在 Python 中,许多包都有 C 扩展,必须为每个平台编译,甚至纯 Python 包也经常需要进行一些安装时配置。同时,“编译”纯 Python 并没有做任何在运行时无法做到的事情。所以在 Python 中,您通常分发 source 包,而不是 编译 包。
但是,.wheel
是二进制包格式。您可以 pip wheel
从源包中为不同的目标构建二进制包;然后,如果有人尝试 pip install
你的包,如果他的系统有一个轮子,那将被下载并安装。
关于python - 与 Java .jar 文件等效的 python 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455978/