我在Windows中,使用pyInstaller打包python文件。 但是发生了一些错误:
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
是在pathC:\Python27\libs\_socket.lib
,但是如何让EXE
find那个文件呢?
这听起来像一个隐藏的进口工作 (只在最新的版本中可用)。
从文档
a = Analysis(['myscript.py'], hiddenimports = ['_socket'], <and everything else>)
您可以将路径添加到应用程序规范文件。
在分析对象中,您可以指定pathex=['C:\Python27\libs\', 'C:\Python27\Lib\site-packages']
以及任何其他路径。
请注意,如果路径没有找到没有问题…我有Linux的路径以及在那里。
如果您使用的是virtualenv,则应该使用“-p”或“–path ='D:…'”选项。 喜欢这个:
pyinstaller.exe --onefile --paths=D:\env\Lib\site-packages .\foo.py
这样做是用这个pathex路径生成foo.spec文件
上述答案都不适合我,但我确实得到了它的工作。 我使用的是openpyxl,它在datetime.py模块中需要jdcal。 没有隐藏的进口或任何这些方法的帮助,运行该exe仍然会说jdcal找不到。 我使用的解决方法是将几个函数从jdcal直接复制到openpyxl代码中的datetime.py中。 然后运行pyinstaller -F program.py
它的工作!
有类似的问题。 这里是我对PyQt5,cffi,python 3.4.3的修复:
这修复了'sip'not found错误和'_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-win之外运行 – 不管那个废话是什么!