2014-11-08 3 views
1

Я пытаюсь использовать cx_freeze для создания исполняемого файла Windows из сценария Python, который импортирует pyrax (для взаимодействия с Rackspace). Pyrax требует oslo (https://github.com/openstack/oslo.utils), модуль для работы с OpenStack, который я установил. Когда я пытаюсь запустить скомпилированный файл .exe, он говорит, что он не может найти модуль «oslo.utils». При попытке включить этот модуль, или только модуль ОСЛО, в моем setup.py файл, я получаю следующее сообщение об ошибке:cx_freeze не может найти модуль oslo

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 работает Python 2.7 через Continuum Anaconda установки. Я установил oslo v1.0.0 с помощью pip (и переустановил его, пытаясь исправить это, но безрезультатно). Cx_freeze - это версия 4.3.3, а модуль oslo - не яйцо или почтовый индекс, а папка со всеми остальными в пакетах сайтов.

«Импорт oslo» и «импорт 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] 
     ) 

Мысли и обходные пути очень ценятся. Благодаря!

+0

Эта трассировка указывает, что что-то в вашей setup.py добавляет '' oslo.py'' в список 'includes'. Номера строк также указывают, что в вашем скрипте setup.py больше, чем показано. Включает список имен модулей, а не имена файлов, поэтому вы должны включить «oslo», без расширения .py. –

+0

Спасибо, что посмотрели. Я непреднамеренно разместил трассировку и скрипт установки из разных прогонов. Номера строк в трассировке и «oslo.py» взяты из настройки с большим количеством комментариев, и добавление .py было отчаянием, пытающимся заставить что-то работать. Итог заключается в том, что при запуске сценария установки, вышедшем выше, я получаю ту же ошибку, заменяю только «oslo.py» на «oslo». Будет обновлен tracback с правильным, когда я получу шанс. – DevinRB

+1

ОК. Можете ли вы выполнить импорт oslo.utils; print (oslo.utils) ', чтобы увидеть, где он загружен из Python? –

ответ

2

перепроведении в ответ:

Добавить в опциях build_exe:

"namespace_packages":["oslo"] 

oslo представляет собой пакет имен, и cx_Freeze должен знать об этом для вещей, чтобы работать правильно.

Видимо, вы также должны добавить его в пакеты:

"packages":["oslo"] 

Я не знаю, почему этот шаг необходим, а также.

Смежные вопросы