2013-02-27 85 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废话是!