Python包装:wheel vs tarball(tar.gz)

时间:2015-07-14 08:38:32

标签: python tar packaging python-wheel

轮子在鸡蛋上的优势很明显(参见为什么不用鸡蛋?https://pypi.python.org/pypi/wheel)。

然而,我并不完全清楚使用轮子优于tar.gz的优势。我可能会遗漏一些明显的东西,比如“它们是一样的”。 我认为它们都可以使用pip直接安装(即使在Windows中),具有相似的大小,并且在打包时需要类似的工作。 听起来像是在证明包装方法的合理性时会遇到的问题。

编辑: 刚刚找到一个例子tar.gz可能比轮子更好。 CherryPy(https://pypi.python.org/pypi/CherryPy)仅为Python 3.x提供轮子,所以如果你想拥有一个本地存储库来为Python 2.7和3.x依赖项提供CherryPy,那么存储tarball似乎更有意义。它是否正确? (只是为了讨论添加一些“基于案例”的理由)

2 个答案:

答案 0 :(得分:11)

这对我来说(直接来自车轮PEP):

  

Python需要一种比sdist更容易安装的包格式。   Python的sdist包由distutils定义并需要distutils和   setuptools构建系统,运行任意代码来构建和安装,   并重新编译,代码只是为了它可以安装到一个新的   virtualenv中。这种混合构建安装的系统很慢,很难   维护并阻碍构建系统和安装程序的创新。

     

Wheel试图通过提供更简单的方法来解决这些问题   构建系统和安装程序之间的接口。轮二进制   包格式使安装程序不必了解构建   系统,通过在许多安装上分摊编译时间来节省时间,   并且无需在目标中安装构建系统   环境。

https://www.python.org/dev/peps/pep-0427/#rationale

请注意我们所说的tarball是被称为" sdists"上方。

答案 1 :(得分:3)

来自Python Wheels

  

车轮的优点

     

•纯python和原生C扩展包的安装速度更快   •避免安装任意代码执行。 (避免setup.py)
  •安装C扩展不需要Windows或OS X上的编译器   •允许更好的缓存进行测试和持续集成   •创建.pyc文件作为安装的一部分,以确保它们与使用的python解释器匹配   •跨平台和机器的更一致的安装。

确保已安装滚轮。

function get_user_givenName($ldap_conn, $user_name, $ou) {


$basedn = "MY BASE DN";


$searchResults = ldap_search($ldap_conn, $basedn, $user_name);

if (!is_resource($searchResults))
die('Error in search results.');


$entry = ldap_first_entry($ldap_conn, $searchResults);
$attrs = ldap_get_attributes($ldap_conn, $entry);

return $attrs["givenName"][0];

}

function get_user_cn($ldap_conn, $user_name, $ou) {


$basedn = "MY BASE DN";


$searchResults = ldap_search($ldap_conn, $basedn, $user_name);

if (!is_resource($searchResults))
die('Error in search results.');


$entry = ldap_first_entry($ldap_conn, $searchResults);
$attrs = ldap_get_attributes($ldap_conn, $entry);

return $attrs["cn"][0];

}