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

Python 配置setup.py以安装解压缩的软件包,python,setuptools,pytz,Python,Setuptools,Pytz,当我安装via时,在pytz上迭代。所有时区都需要几秒钟。有人建议,这就解决了性能问题。现在,我想让setuptools在任何时候有人安装我的软件包时都能解压安装pytz 我是否可以将setuptools配置为始终解压缩包的特定依赖项 $ virtualenv ve2.7 $ source ve2.7/bin/activate (ve2.7)$ python setup.py install (ve2.7)$ python slowpytz.py 2.62620520592s (ve2.7)$

当我安装via时,在
pytz上迭代。所有时区都需要几秒钟。有人建议,这就解决了性能问题。现在,我想让setuptools在任何时候有人安装我的软件包时都能解压安装pytz

我是否可以将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')

据我所知,没有办法在所有情况下强制解压依赖项。有些东西虽然稍有不足,但可能仍然有用:

  • 您可以提交错误报告,以便pytz在其
    setup.py
    中设置
    zip\u safe=False
    ,使用性能数据作为更改的理由
  • 否则,您可以使用fork pytz,添加
    zip\u safe=False
    ,让您的包依赖于您的fork。(这不是一个很好的选择。)
  • 您可以建议用户总是使用
    pip
    安装软件包,它总是安装所有解压的东西(包括依赖项),而不是
    easy\u install
    python setup.py install
  • 如果您的用户必须使用
    easy\u install
    ,您可以建议他们使用
    easy\u install-Z
    ,这将强制解压缩安装

你有没有试着弄清楚它为什么这么慢?我的理解是,它需要在时区数据文件上迭代,如果它们被压缩,那么速度会明显变慢。(据我所知,这不是一个好的解释。)谢谢你的建议。我的用户已经在使用pip安装,但我的测试使用setup.py安装到虚拟环境中,以针对各种Python版本进行测试,这就是我发现此问题的原因。@DanWeaver为什么不在测试中使用pip安装到虚拟环境中?虚拟环境中始终安装有pip,因此它肯定是可用的,并且可以编写脚本。或者更好的是,为什么不使用tox,这是一个专门设计用来处理安装到VirtualNVS中以测试各种Python版本(并使用pip进行安装)的工具?我不知道我可以进行
pip安装。
,但是现在我在做测试,而不是使用
python setup.py install
pip unzip pytz
。@DanWeaver:您可以使用
tox
在virtualenvs中的几个python版本上运行测试
pip安装-e。
安装时不复制源代码进行开发。FWIW,我现在也在使用tox。太棒了。