Python 配置setup.py以安装解压缩的软件包
当我安装via时,在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)$
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。太棒了。