Python:`dist`和`sdist`之间有性能差异吗?
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
文件是怎么编译的,执行时应该没有性能差异,它们的表现应该是一样的。
那么,dist
和sdist
的Python包之间真的有性能差别吗?
1 个回答
7
如果你的代码是纯Python写的,部署时所花的时间差别不大。需要注意的是,.py
文件和.pyc
文件在性能上没有区别,唯一的不同是.pyc
文件在第一次读取时会稍微快一点。所谓的优化过的 .pyo
文件只是去掉了一些断言,可能还会去掉文档字符串,所以它们并没有得到很大的优化。
当你有C语言文件时,差别就大了。sdist会把这些文件包含进去,只要你正确引用了它们,但用户需要有一个能用的合适的编译器、Python的头文件等等。而且,你还得花时间在每个客户端上构建这些文件。相同的分发包可以在你部署的任何平台上使用。
另一方面,bdist只需编译一次代码。安装到客户端时非常快速,因为他们不需要再构建任何东西,也更简单,因为不需要安装编译器。缺点是你必须为特定的平台构建。Setuptools可以进行跨平台编译,只要你安装并配置好相应的工具。