2013-02-27 59 views
5

我在Windows中,使用pyInstaller打包python文件。但事情發生錯誤:pyInstaller:導入錯誤

Traceback (most recent call last): 
    File "<string>", line 2, in <module> 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in i 
mportHook 
    mod = _self_doimport(nm, ctx, fqname) 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in d 
oimport 
    exec co in mod.__dict__ 
    File "D:\Useful Apps\pyinstaller-2.0\server\build\pyi.win32\server\out00-PYZ.p 
yz\SocketServer", line 132, in <module> 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in i 
mportHook 
    mod = _self_doimport(nm, ctx, fqname) 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in d 
oimport 
    exec co in mod.__dict__ 
    File "D:\Useful Apps\pyinstaller-2.0\server\build\pyi.win32\server\out00-PYZ.p 
yz\socket", line 47, in <module> 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 409, in i 
mportHook 
    raise ImportError("No module named %s" % fqname) 
ImportError: No module named _socket 

我知道_socket在路徑C:\Python27\libs\_socket.lib,但如何才能讓EXE找到該文件?

回答

2

您可以將路徑添加到您的應用程序規範文件。

Analysis對象,你可以指定pathex=['C:\Python27\libs\', 'C:\Python27\Lib\site-packages'],和其他任何路徑...

注意的是,如果路徑中沒有找到有沒有問題......我從Linux和路徑中存在。

1

如果您正在使用的virtualenv你應該使用 「-p」 或 「--path = 'd:......'」 選項。就像這樣:

pyinstaller.exe --onefile --paths=D:\env\Lib\site-packages .\foo.py 

這樣做是產生這種pathex路徑

0

上述答案的工作對我來說foo.spec文件,但我沒有得到它的工作。我使用的是openpyxl,它需要datetime.py模塊中的jdcal。沒有任何隱藏的導入或任何這些方法的幫助,運行該exe仍然會說jdcal找不到。我使用的解決方法是將幾個函數從jdcal直接複製到openpyxl代碼中的datetime.py中。然後跑 pyinstaller -F program.py

它的工作!

0

有類似的問題。這是我對PyQt5,CFFI,蟒蛇3.4.3修復:

這修正了「抿」未發現的錯誤和「_cffi_backend」之一,如果說出現:

# -*- mode: python -*- 

block_cipher = None 


a = Analysis(['LightShowApp.py'], 
      pathex=['c:\\MyProjects\\light-show-editor-36', 
      'c:\\Python34\\libs\\', 'c:\\Python34\\Lib\\site-packages'], 
      binaries=None, 
      datas=None, 
      hiddenimports=['sip', 'cffi'], 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
      cipher=block_cipher) 
exe = EXE(pyz, 
      a.scripts, 
      a.binaries, 
      a.zipfiles, 
      a.datas, 
      name='LightShowApp', 
      debug=False, 
      strip=False, 
      upx=True, 
      console=True) 

看「pathex」和上面的'hiddenimports'。這些是來自默認生成的唯一更改。構建EXE用:

pyinstaller LightShowApp.spec -F

我跑VENV或PIP贏的那個之外 - whateverTF廢話是!