2013-07-08 92 views
3

我用之前pyinstaller試着和扭曲讓我的應用程序的可執行文件,但我得到執行時,這個錯誤:導入錯誤與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.

從哪裏我建立可執行文件,即使,我可以打開一個Python解釋器,併成功地導入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")]) 

編輯1:忘了提,我也試圖把一個空白__init__.py文件zope.interface下,並且也沒有幫助。

編輯2:使用cx_freeze,build文件夾的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 

編輯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

如果你添加''packages':['zope.interface']'到你的'build_exe_options'中怎麼辦? –

+0

已經嘗試過,同樣的確切錯誤。我甚至同時將它添加到'includes'和'namespace_packages'中。 –

+0

它是否安裝在.egg目錄中? cx_Freeze有時在找到蛋中的東西時遇到了困難(儘管它似乎發現了扭曲)。 –

回答

5

pkg_resources添加到您的includes您的setup.py中,用於cx_Freeze。

+1

對於.spec文件中的PyInstaller,在'hiddenimports'列表中放置'pkg_resouces'。 –

0

嘗試增加以build_exe_options一個具體包括該分包即"includes": ["zope.interface"],這應該強制包含它。

+0

謝謝,但是這個問題在評論中提到,我已經試過了。 –

0

當我添加「通過pkg_resources」中包括並運行cx_freeze劇本,我只得到這些前兩行,並留在了這裏:

運行建立

運行build_exe

+0

有人有同樣的問題? – Maxi

+0

其實它是來自這個:namespace_packages = ['zope'] – Maxi

+0

我在包含中添加了它,它現在生成,但我嘗試運行時遇到運行時錯誤: – Maxi

2

我有同樣的問題與cx_freeze。上述解決方案似乎都不適用於我的案例。 對我來說,從here這個解決方案工作:

您需要實際創建 zope/__init__.py一個空文件,以便正常處理 由小鬼執行。find_module()實際上工作