我试图使用cx_freeze从导入金字塔的Python (与Rackspace接口)创建一个Windows可执行文件。Pyrax需要奥斯陆(https://github.com/openstack/oslo.utils),这是我安装的用于使用OpenStack的模块。当我试图运行编译好的.exe时,它说它找不到模块'oslo.utils‘。当我试图在我的setup.py文件中包含这个模块,或者只包含奥斯陆模块时,我会得到以下错误:
running build
running build_exe
Traceback (most recent call last):
File "setup.py", line 45, in <module>
executables = [execu]
File "C:\Users\Devin\Anaconda\lib\site-packages\cx_Freeze\dist.py", line 362, in setup
distutils.core.setup(**attrs)
File "C:\Users\Devin\Anaconda\lib\distutils\core.py", line 152, in setup
dist.run_commands()
File "C:\Users\Devin\Anaconda\lib\distutils\dist.py", line 953, in run_commands
self.run_command(cmd)
File "C:\Users\Devin\Anaconda\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "C:\Users\Devin\Anaconda\lib\distutils\command\build.py", line 127, in run
self.run_command(cmd_name)
File "C:\Users\Devin\Anaconda\lib\distutils\cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "C:\Users\Devin\Anaconda\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "C:\Users\Devin\Anaconda\lib\site-packages\cx_Freeze\dist.py", line 232, in run
freezer.Freeze()
File "C:\Users\Devin\Anaconda\lib\site-packages\cx_Freeze\freezer.py", line 606, in Freeze
self.finder = self._GetModuleFinder()
File "C:\Users\Devin\Anaconda\lib\site-packages\cx_Freeze\freezer.py", line 346, in _GetModuleFinder
finder.IncludeModule(name)
File "C:\Users\Devin\Anaconda\lib\site-packages\cx_Freeze\finder.py", line 678, in IncludeModule
namespace = namespace)
File "C:\Users\Devin\Anaconda\lib\site-packages\cx_Freeze\finder.py", line 386, in _ImportModule
raise ImportError("No module named %r" % name)
ImportError: No module named 'oslo.utils'我在Windows 8上运行Python2.7,通过一个连续的Anaconda安装。我已经使用pip安装了奥斯陆v1.0.0 (为了修复这个问题,我重新安装了它,但是没有用)。Cx_freeze是4.3.3版本,而奥斯陆模块不是一个鸡蛋或拉链,而是在站点包下的其他所有东西中随处可见。
“导入奥斯陆”和“导入oslo.utils”都在解释器中工作。setup.py中手动包含的其他模块工作正常。我的setup.py文件如下所示:
import sys
from cx_Freeze import setup, Executable
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
# include email.__init__ lazy imports manually for pyrax
MIMENAMES = [
'audio',
'base',
'image',
'message',
'multipart',
'nonmultipart',
'text',
]
email_includes = ['email.mime.' + x for x in MIMENAMES]
includes = ['oslo.utils']
includes.extend(email_includes)
include_files = []
execu = Executable(
script = "main.py",
initScript = None,
base = base,
targetName = "main.exe",
compress = False,
copyDependentFiles = True,
appendScriptToExe = False,
appendScriptToLibrary = False,
icon = None
)
setup( name = "issgmain",
version = "0.1",
description = "my description",
options = {"build_exe": {"includes":includes, "include_files": include_files}},
executables = [execu]
)想法和解决办法很受赞赏。谢谢!
发布于 2014-11-12 18:43:32
重新张贴作为答复:
添加到build_exe选项中:
"namespace_packages":["oslo"]oslo是一个命名空间包,cx_Freeze需要了解它才能正常工作。
显然,您还需要将其添加到包中:
"packages":["oslo"]我不知道为什么还需要这一步。
https://stackoverflow.com/questions/26821102
复制相似问题