2013-07-08 3 views
3

я использовал pyinstaller перед тем, чтобы попытаться получить мое приложение с витыми как исполняемый файл, но я получил эту ошибку при выполнении:ImportError с cx_Freeze и pyinstaller

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/cx_Freeze/initscripts/Console.py", line 27, in <module> 
    exec code in m.__dict__ 
    File "client_test.py", line 2, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/Twisted-13.0.0-py2.7-linux-x86_64.egg/twisted/__init__.py", line 53, in <module> 
    _checkRequirements() 
    File "/usr/local/lib/python2.7/dist-packages/Twisted-13.0.0-py2.7-linux-x86_64.egg/twisted/__init__.py", line 37, in _checkRequirements 
    raise ImportError(required + ": no module named zope.interface.") 
ImportError: Twisted requires zope.interface 3.6.0 or later: no module named zope.interface. 

Итак, я попытался с помощью cx_freeze, но я получить ту же ошибку точный, даже при использовании 'namespace_packages': ['zope'] как this example.

От того, где я создаю исполняемый файл, я могу открыть интерпретатор питона и Устпешно импорта zope.interface, и я установил его через easy_install, а затем побежал pip install -U zope.interface позже, которая не имела никакого эффекта.

Вот мой setup.py для cx_freeze:

import sys 
from cx_Freeze import setup, Executable 

# Dependencies are automatically detected, but it might need fine tuning. 
build_exe_options = {"excludes": ["tkinter"], 
      'namespace_packages':['zope'], 
      'append_script_to_exe':True 
} 

setup( name = "exetest", 
     version = "0.1", 
     description = "My first executable", 
     options = {"build_exe": build_exe_options}, 
     executables = [Executable("client_test.py")]) 

EDIT 1: Забыл упомянуть, что я также попытался положить пустой __init__.py файл под zope.interface, а также не помогло.

EDIT 2: При использовании cx_freeze внутри library.zip папки сборки, zope.interface находится там, и я не думаю, что какой-либо из модулей не хватает, но я все еще получаю ImportError

Это с выхода cx_freeze:

Missing modules: 
? _md5 imported from hashlib 
? _sha imported from hashlib 
? _sha256 imported from hashlib 
? _sha512 imported from hashlib 
? builtins imported from zope.schema._compat 
? ctypes.macholib.dyld imported from ctypes.util 
? dl imported from OpenSSL 
? html imported from twisted.web.server 
? netbios imported from uuid 
? ordereddict imported from zope.schema._compat 
? queue imported from twisted.internet.threads 
? twisted.python._epoll imported from twisted.internet.epollreactor 
? twisted.python._initgroups imported from twisted.python.util 
? urllib.parse imported from twisted.web.server 
? win32wnet imported from uuid 
? wsaccel.utf8validator imported from autobahn.utf8validator 
? zope.i18nmessageid imported from zope.schema._messageid 
? zope.testing.cleanup imported from zope.schema.vocabulary 

EDIT 3: Вот вывод sys.path из моего исполняемого файла (укороченный с ..)

['../build/exe.linux-x86_64-2.7/client_test', 
'../build/exe.linux-x86_64-2.7', 
'../build/exe.linux-x86_64-2.7/client_test.zip', 
'../build/exe.linux-x86_64-2.7/library.zip'] 

Вот ошибка, я получаю, когда я импортировать zope.interface непосредственно:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/cx_Freeze/initscripts/Console.py", line 27, in <module> 
    exec code in m.__dict__ 
    File "client_test.py", line 3, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/zope.schema-4.3.2-py2.7.egg/zope/__init__.py", line 1, in <module> 
    __import__('pkg_resources').declare_namespace(__name__) 
ImportError: No module named pkg_resources 

После добавления pkg_resources к моему включает в моей cx_freeze setup.py, программа побежал

+0

А что, если вы добавите '' пакеты ': [' zope.interface '] 'в ваш' build_exe_options'? –

+0

Пробовал это уже, ту же точную ошибку. Я даже добавил его в 'include' и' namespace_packages' одновременно. –

+0

Установлен ли он в директорию .egg? Иногда cx_Freeze испытывает проблемы с поиском предметов в яйцах (хотя кажется, что они были искажены). –

ответ

5

Добавить pkg_resources в ваш includes в вашем setup.py для cx_Freeze.

+1

Для PyInstaller в файле .spec введите 'pkg_resouces' в список' hiddenimports'. –

0

Попробуйте добавить к build_exe_options в специфические включают в себя подпакет, т.е. "includes": ["zope.interface"],, это должно принудительно включить его.

+0

Спасибо, но это было упомянуто в комментариях к вопросу, я уже пробовал. –

0

Когда я добавляю в «pkg_resources» включает в себя и запустить скрипт cx_freeze, я только получить эти первые две строки, и он остается здесь:

работает построить

работает build_exe

+0

У кого-то такая же проблема? – Maxi

+0

На самом деле это происходит из этого: namespace_packages = ['zope'] – Maxi

+0

Я добавил это в include, и теперь он создается, но я получаю ошибку времени выполнения при попытке запустить его: – Maxi

2

У меня было то же самое вопрос с cx_freeze. Ни одно из вышеперечисленных решений, похоже, не работало в моем случае. Для меня это решение от here работал:

Вы должны фактически создать zope/__init__.py как пустой файл, так что нормальная обработка выполняется имп.find_module() на самом деле работает

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