我试图了解Python包是如何工作的。假设鸡蛋是某种包装机制,但如何快速概述它们所起的作用,以及它们为什么有用以及如何创建它们的一些信息?
注:鸡蛋包装已被车轮包装取代。
与Java中的.jar文件的概念相同,它是一个.zip文件,其中一些元数据文件重命名为.egg,用于将代码作为包分发。
具体来说:Python Eggs的内部结构
A "Python egg" is a logical structure embodying the release of a specific version of a Python project, comprising its code, resources, and metadata. There are multiple formats that can be used to physically encode a Python egg, and others can be developed. However, a key principle of Python eggs is that they should be discoverable and importable. That is, it should be possible for a Python application to easily and efficiently find out what eggs are present on a system, and to ensure that the desired eggs' contents are importable. The .egg format is well-suited to distribution and the easy uninstallation or upgrades of code, since the project is essentially self-contained within a single directory or file, unmingled with any other projects' code or resources. It also makes it possible to have multiple versions of a project simultaneously installed, such that individual programs can select the versions they wish to use.
.egg文件是Python包的分发格式。它只是一个源代码分发版或Windows exe的替代品。但是请注意,对于纯Python, .egg文件是完全跨平台的。
.egg文件本身本质上是一个.zip文件。如果您将扩展名更改为“zip”,您可以看到它将在存档中有文件夹。
此外,如果您有一个.egg文件,您可以使用easy_install将其作为包安装
例子: 要为一个目录(比如mymath)创建一个。egg文件,该目录本身可能有几个python脚本,执行以下步骤:
# setup.py
from setuptools import setup, find_packages
setup(
name = "mymath",
version = "0.1",
packages = find_packages()
)
然后,从终端做:
$ python setup.py bdist_egg
这将生成大量输出,但当它完成时,您将看到有三个新文件夹:build、dist和mymath.egg-info。我们唯一关心的文件夹是dist文件夹,在这里可以找到。egg文件mymath-0.1-py3.5。使用默认的python(安装)版本号(我的是3.5)
来源:Python库博客
“Egg”是用于python相关项目的单文件可导入分发格式。
“Python Eggs的快速指南”指出,“Eggs之于Python,就像jar之于Java……”
鸡蛋实际上比罐子更丰富;它们包含有趣的元数据,如许可细节、发布依赖项等。
声明:egg是一种废弃的python格式包,使用eggs的工具已不复存在。
egg是一个python包。它是一个压缩文件,包含python源文件和/或编译的库。
格式没有很好地规定它必须包含什么,或者如何为不同版本的python和不同的操作系统制作包,这是它被替换的原因之一。
这种形式出现在2004年左右,一直使用到2010年代中期,现在已经完全被车轮和pip安装所取代。
使用easy_install命令安装鸡蛋。该命令在setuptools v58.3(2021年)中被移除。你不能再用鸡蛋了。
如果您看到任何提到easy_install或egg的内容,无论是堆栈溢出的回答还是教程,都是严重过时的。
推荐这个较长的回答https://stackoverflow.com/a/68897551/5994461,了解python打包的深入历史。它涉及到pip,车轮,鸡蛋和更多的东西。
推荐文章
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误
- 如何检索Pandas数据帧中的列数?
- except:和except的区别:
- 错误:“字典更新序列元素#0的长度为1;2是必需的”