Java具有将所有代码打包到称为Jar文件的文件中的概念.Python有相同的想法吗?如果是这样,它是什么?我如何打包文件?
aba*_*ert 22
Python没有任何与.jar文件完全等效的东西.
有许多不同之处,如果不知道自己想要做什么,就很难解释如何去做.但是Python包装用户指南在解释几乎所有相关内容方面做得非常好.
以下是一些主要差异.
.jar文件是一个已编译的类集合,可以放入您的应用程序中,也可以安装在您的应用程序的任何位置CLASSPATH.
在Python中:
.py(或.pyc)模块放入您的应用程序中,sys.path也可以将其安装在您的应用程序的任何位置,并且可以导入和使用它.__init__.py,它将其他地方的同名目录合并sys.path到一个包中)..zip包含任何数量的模块和包的归档可以在任何地方进行存储,并且它的路径添加到您的sys.path(例如,在运行时或通过PYTHONPATH)及其所有内容将成为可导入.最常见的是,您希望将事物安装到系统,用户或virtualenv site-packages目录中.建议的方法是创建一个pip兼容的包分发; 人们然后安装它(并可能通过PyPI或私人仓库自动下载)pip.
pip但是,做的远不止于此.它还允许您管理包之间的依赖关系.理想情况下,不是列出一些人必须手动下载和安装的先决条件,而是将它们作为依赖项,而有人必须这样做pip install your-library.它会跟踪您的站点包的状态,因此您可以卸载或升级包,而无需跟踪特定文件.
同时,在Java中,大多数.jar文件都是跨平台的; 建立一次,随处运行.一些软件包具有JNI本机代码,不能以这种方式使用,但它不是常态.
在Python中,许多软件包都有必须为每个平台编译的C扩展,甚至纯Python软件包通常也需要进行一些安装时配置.同时,"编译"纯Python不会做任何在运行时也无法做到的事情.所以在Python中,你通常会分发源包,而不是编译包.
但是,.wheel是二进制包格式.您可以pip wheel从源包中为不同的目标构建二进制包; 然后,如果有人试图pip install你的包裹,如果他的系统有一个轮子,将下载并安装.
Easy Install fromsetup_tools定义了.egg部署Python库或应用程序的格式.虽然与JAR类似,但它在Java世界中普遍存在于JAR中.很多人只是部署.py文件.
一种更新的格式,旨在取代鸡蛋,是轮子.
尽管由于可移植性问题它不是 jar 的完美替代品,但我会添加“自动提取”存档方式。
一种可能性是“makeself”:https ://makeself.io/
但是如果您不需要打包外部文件,并且如果您喜欢 KISS 方法,那么以下是一个不错的选择:
以下内容摘自 Asim Jalis 的网站。
创建一个__main__.py包含以下内容的文件:
print "Hello world from Python"
Run Code Online (Sandbox Code Playgroud)
app.zip通过键入以下内容将 Python 文件(在本例中仅此一个文件)压缩到:
zip app.zip *
Run Code Online (Sandbox Code Playgroud)
下一步向 zip 文件添加一个shebang并将其另存为app——此时该文件app是一个包含所有 Python 源代码的 zip 文件。
echo '#!/usr/bin/env python' | cat - app.zip > app
chmod 755 app
Run Code Online (Sandbox Code Playgroud)
就是这样。该文件app现在有一个已准备好部署为单个文件的压缩 Python 应用程序。
您可以app使用 Python 解释器运行:
python app
Run Code Online (Sandbox Code Playgroud)
或者您可以直接从命令行运行它:
./app
Run Code Online (Sandbox Code Playgroud)
参考:https : //gist.github.com/asimjalis/4237534