Python:`dist`和`sdist`之间有性能差异吗?

5 投票
1 回答
993 浏览
提问于 2025-04-18 08:22

Python的setuptools可以创建源代码分发包:

python setup.py sdist # create a source distribution (tarball, zip file, etc.)

也可以创建二进制分发包:

python setup.py bdist   # create a built (binary) distribution

根据我的理解,这两者在性能上应该没有区别:

  • bdist会直接安装已经编译好的.pyc文件,这些文件来自二进制包。
  • sdist则是把.py文件编译成.pyc文件,然后再安装它们。

无论.pyc文件是怎么编译的,执行时应该没有性能差异,它们的表现应该是一样的。

那么,distsdist的Python包之间真的有性能差别吗?

1 个回答

7

如果你的代码是纯Python写的,部署时所花的时间差别不大。需要注意的是,.py文件和.pyc文件在性能上没有区别,唯一的不同是.pyc文件在第一次读取时会稍微快一点。所谓的优化过的 .pyo文件只是去掉了一些断言,可能还会去掉文档字符串,所以它们并没有得到很大的优化。

当你有C语言文件时,差别就大了。sdist会把这些文件包含进去,只要你正确引用了它们,但用户需要有一个能用的合适的编译器、Python的头文件等等。而且,你还得花时间在每个客户端上构建这些文件。相同的分发包可以在你部署的任何平台上使用。

另一方面,bdist只需编译一次代码。安装到客户端时非常快速,因为他们不需要再构建任何东西,也更简单,因为不需要安装编译器。缺点是你必须为特定的平台构建。Setuptools可以进行跨平台编译,只要你安装并配置好相应的工具。

撰写回答