如何使用 py2exe 和 esky 冻结 Celery?
Posted
技术标签:
【中文标题】如何使用 py2exe 和 esky 冻结 Celery?【英文标题】:How do I freeze Celery using py2exe and esky? 【发布时间】:2014-04-08 23:07:29 【问题描述】:我正在尝试冻结一个 Python 应用程序和 Celery,它与 esky 打包在一起以提供更新功能。我需要将 Celery 冻结,以便它可以看到第一个可执行文件中的模块,该可执行文件也将出现在 py2exe 创建的 library.zip 文件中。
问题是我无法让 Celery 与 esky 一起冷冻。这是我用来尝试找到解决问题的解决方案的最低限度的、精简的 setup.py 文件:
from esky import bdist_esky
from distutils.core import setup
setup(name='ColdCelery',
scripts=['C:\\Python27\\Lib\\site-packages\\celery\\bin\\celery.py'],
options =
'bdist_esky':
'freezer_module': 'py2exe',
)
当我运行以下命令时:
python setup.py bdist_esky
我收到以下错误:
running bdist_esky
running build_scripts
*** searching for required modules ***
error: c:\temp\tmpz5146o\scripts\celery.py: The process cannot access the file
because it is being used by another process
机器上没有运行可以使用 Celery 的 Python 进程。我认为这是 py2exe 和 esky 之间的冲突,但不知道如何克服它。
我可以使用 py2exe 冻结 Celery 而无需引用 esky 没有问题,但我需要能够在未来更新这个项目,所以 esky 支持是必须的。
【问题讨论】:
【参考方案1】:我在教程中运行 py2exe 和 esky 时遇到问题
我在我的项目中使用 cx freeze 并没有遇到任何问题。
它还支持python3、linux和mac,所以我建议你试试看。
http://cx-freeze.readthedocs.org/en/latest/
【讨论】:
感谢您的回答。我们最终解决了这个问题,使用了一台只安装了绝对必需品的裸机构建机器。变量越少,事情似乎越稳定。 所以你最终使用了 py2exe 和 esky? 是的,我们两个都在工作,到目前为止我们都很满意。【参考方案2】:最终,我们没有找到发生故障的原因,但我们确实抓住了一个重要点,我们改变了环境来解决这个问题。
我们的构建机器为开发承担了双重职责。这当然不是最好的主意,它可能是为该开发安装的众多软件包之一,但会引起麻烦。
所以我们从基本的 Windows 安装开始,只安装了实际执行构建所需的最少数量的包。这似乎成功了。
【讨论】:
【参考方案3】:我重新发现了我们解决此问题的方法。错误信息具有误导性——调试后发现实际错误是esky在打包操作过程中在celery.py顶部添加了一些行引起的。这些行超出了 from __future__ import absolute_import, unicode_literals
导致以下错误:
SyntaxError: from __future__ imports must occur at the beginning of the file
修复:
编辑 C:\Python27\Lib\site-packages\celery\bin\celery.py
并从文件顶部删除所有 cmets 和空行。
【讨论】:
以上是关于如何使用 py2exe 和 esky 冻结 Celery?的主要内容,如果未能解决你的问题,请参考以下文章