当我需要一个Python库时,我使用pip从PyPi中获取它,如果我创建了一个项目并想共享它,我只需要具有setup.py文件,这将使它易于安装。因此,我想知道鸡蛋或轮子包装的用途是什么。为什么我们需要蟒蛇包装(例如鸡蛋)?
回答
的Python Packaging User Guide不得不说关于这一主题的以下内容:
轮和蛋是旨在支持需要一个安装工件,不需要建设或编译的使用情况下,两个包装形式,这在测试和生产工作流程中可能是昂贵的。
这些格式可用于分发包含二进制扩展模块的包。否则需要在安装过程中进行编译。
如果没有编制涉及一个source distribution在原则上是足够的,但是用户指南还建议创建性能原因轮:
至少,你应该创建一个源代码发布:
python setup.py sdist
“源代码发布”是未构建的(即,它不是构建发行版),并且需要通过pip安装时的构建步骤。 即使该分发版本是纯Python(即不包含扩展名),它仍然涉及构建步骤以从setup.py构建安装元数据。
[...]
您还应该为您的项目创建一个轮子。轮子是一个可以安装而不需要经过“构建”过程的构建包。对于最终用户来说,安装车轮比从源代码分发系统安装要快得多。
简而言之,软件包是一个方便的东西 - 主要是为用户。
Wheel包统一了分发和安装包含纯python,平台相关代码或编译扩展的项目的过程。用户不需要担心程序包是用Python编写的还是用C编写的 - 它只是起作用。
谢谢,但通常我使用的所有项目都只有配置文件和python脚本,因此不需要编译。因此,我认为包装不是通常使用或需要的东西(至少在我的情况下) –
谢谢!我的问题是回答:) –
鸡蛋包是一个较旧的标准,你应该忽略它们。使用pip install .
而不是./setup.py install
来防止创建它们。 (附录:它们也是变相的.zip
,Python从中读取包数据 - 不完全是性能最高的解决方案)
另一方面,车轮包是新标准。它们允许为Windows,macOS和Linux创建可移植的二进制包。现在,你可以做pip install PyQt5
(作为例子),它只会工作,系统上不需要C++编译器和Qt库。一切都预先编译并包含在方向盘中。非二进制包也会受益,因为不运行setup.py
(所有元数据都在轮子中)更安全。 (附录:那些也是.zip
s,但是它们在安装时解包)
谢谢。但是,如果我的项目只包含python脚本和配置文件,wheel包不会带来任何好处,对吧? –
@ M.Buil http://pythonwheels.com/ - *避免安装时执行任意代码。 (避免setup.py)。创建.pyc文件作为安装的一部分,以确保它们与使用的python解释器匹配。跨平台和机器的更一致的安装。* –
- 1. 为什么我们需要包装类
- 2. 如何安装蟒蛇蛋
- 3. 为什么{{site.eggs.label}}不会为jekyll集合“鸡蛋”返回“鸡蛋”?
- 4. 为什么node.js的需要蟒蛇
- 5. 为什么我们需要装饰器中的包装函数?
- 6. 什么是Python鸡蛋?
- 7. 装配需要什么?为什么我们使用它们?
- 8. python鸡蛋与常规包装有什么不同?
- 9. Python:为什么有些软件包被安装成鸡蛋,有些软件包被安装成“蛋文件夹”?
- 10. 需要蟒蛇
- 11. 为什么在安装本地鸡蛋库时pip失败?
- 12. 我们需要安装什么?
- 13. 蟒蛇蛋缓存
- 14. 为什么蟒蛇
- 15. 是什么类似python鸡蛋的`gem server`(例如``pip server`)
- 16. 需要与蟒蛇
- 17. 蟒蛇,正则表达式:我需要什么RegEx?
- 18. Java:为什么需要包装类?
- 19. 为什么JAX-WS需要包装类?
- 20. 需要打包的Jinja2模板蟒蛇
- 21. Python鸡蛋文件有什么意义?
- 22. 从GitHub中的特定分支安装。我需要指定鸡蛋吗?
- 23. DavLockDB:我们需要什么?
- 24. 为什么我们需要simple_one_for_one?
- 25. 为什么我们需要TensorFlow tf.Graph?
- 26. 为什么我们需要使用prompt.start()?
- 27. 为什么我们需要scalaz.stream迭代?
- 28. 为什么我们需要WCF
- 29. 为什么我们需要Anaconda 2.7?
- 30. 为什么我们需要编写log.isDebugEnabled?
我知道它是什么。我不明白它的需要,因为编译概念不适用于python,因为它适用于例如C或java。 –