配置setup.py以安装解压缩的包

时间:2014-09-12 20:57:01

标签: python setuptools pytz

当我通过pytz安装setuptools时,迭代pytz.all_timezones需要几秒钟。有人建议running pip unzip pytz,这可以解决性能问题。现在我想在任何人安装我的软件包的时候让setuptools安装pytz uncompressed。

我是否可以将setuptools配置为始终解压缩我的包的特定依赖项?

$ virtualenv ve2.7
$ source ve2.7/bin/activate
(ve2.7)$ python setup.py install
(ve2.7)$ python slowpytz.py
2.62620520592s
(ve2.7)$ pip unzip pytz
DEPRECATION: 'pip zip' and 'pip unzip` are deprecated, and will be removed in a future release.
Unzipping pytz (in ./ve2.7/lib/python2.7/site-packages/pytz-2014.7-py2.7.egg)
(ve2.7)$ python slowpytz.py
0.0149159431458s

setup.py

from setuptools import setup
setup(name='slowpytz', version='0.0.1', install_requires=['pytz==2014.7'])

slowpytz.py

import pytz
import time
start = time.time()
zones = list(pytz.all_timezones)
print(str(time.time() - start) + 's')

1 个答案:

答案 0 :(得分:2)

我无法在所有情况下强制解压缩依赖项。有些事情略有不足,但可能仍然有用:

  • 您可以提交pytz的错误报告,在其zip_safe=False中设置setup.py,并使用效果数据作为更改的理由。
  • 如果失败了,你可以分叉pytz,添加zip_safe=False,让你的包依赖于你的分叉。 (不是一个很好的选择。)
  • 您可以建议用户始终使用pip安装您的软件包,该软件包始终安装解压缩的所有内容(包括依赖项),而不是easy_installpython setup.py install
  • 如果您的用户必须使用easy_install,您可以建议他们使用easy_install -Z,这会强制解压缩安装。