如何使用py2exe和esky冻结Celery?

时间:2014-04-08 23:07:29

标签: python py2exe esky

我正在尝试冻结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支持。

3 个答案:

答案 0 :(得分:0)

我在教程

中运行py2exe和esky时遇到了问题

我在我的项目中使用cx冻结,我没有遇到任何问题。

它还支持python3,linux和mac,所以我建议你去试试吧。

http://cx-freeze.readthedocs.org/en/latest/

答案 1 :(得分:0)

最终,我们没有找到发生故障的原因,但我们确实发现了重要的一点,我们改变了环境以解决问题。

我们的构建机器对开发负有双重责任。当然,这不是最好的想法,它可能是为该开发安装的许多许多软件包中的一个,这会导致问题。

因此,我们从一个简单的Windows安装开始,只安装了实际执行构建所需的最少数量的软件包。这似乎已经成功了。

答案 2 :(得分:0)

我重新发现了此问题的解决方法。错误消息具有误导性-调试后,我发现实际错误是由esky在打包操作期间在celery.py顶部添加一些行引起的。这些行位于contains上方,从而导致以下错误:

from __future__ import absolute_import, unicode_literals

要解决:

编辑SyntaxError: from __future__ imports must occur at the beginning of the file 并从文件顶部删除所有注释和空白行。