Issue packaging with Pyinstaller
对于所有专家 - 我们一直在开发包含以下模块的应用程序:
- OpenCV的
- numpy的
- 大熊猫
- 跺脚
- NLTK
- BS4
- PIL
- 要求
和其他一些不属于Python标准库的人。 希望将相同的包装成单个可执行文件。 因此尝试使用pyinstaller。 执行时相同 - 它会建立分发文件夹 - 但无法执行。 它会引发以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Traceback (most recent call last): File"app.py", line 6, in <module> File"/root/Projects/BIUEngine/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File"ProcessManager.py", line 7, in <module> File"/root/Projects/BIUEngine/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File"ProcessWorker.py", line 16, in <module> File"/root/Projects/BIUEngine/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File"site-packages/cv2/__init__.py", line 3, in <module> ImportError: numpy.core.multiarray failed to import [3502] Failed to execute script app |
以下是运行时命令的输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | root@devserver:~/Projects/BIUEngine/src# pyinstaller app.py 113 INFO: PyInstaller: 3.4 114 INFO: Python: 3.6.7 116 INFO: Platform: Linux-4.4.0-131-generic-x86_64-with-Ubuntu-16.04-xenial 116 INFO: wrote /root/Projects/BIUEngine/src/app.spec 119 INFO: UPX is not available. 123 INFO: Extending PYTHONPATH with paths ['/root/Projects/BIUEngine/src', '/root/Projects/BIUEngine/src'] 123 INFO: checking Analysis 123 INFO: Building Analysis because Analysis-00.toc is non existent 124 INFO: Initializing module dependency graph... 127 INFO: Initializing module graph hooks... 179 INFO: Analyzing base_library.zip ... 10300 INFO: running Analysis Analysis-00.toc 10357 INFO: Caching module hooks... 10381 INFO: Analyzing /root/Projects/BIUEngine/src/app.py 13258 INFO: Processing pre-find module path hook distutils 13297 INFO: distutils: retargeting to non-venv dir '/usr/lib/python3.6/distutils' 14908 INFO: Processing pre-safe import module hook setuptools.extern.six.moves 16017 INFO: Processing pre-find module path hook site 16044 INFO: site: retargeting to fake-dir '/root/Projects/BIUEngine/lib/python3.6/site-packages/PyInstaller/fake-modules' 18473 INFO: Processing pre-safe import module hook six.moves 32950 INFO: Processing pre-safe import module hook urllib3.packages.six.moves 55571 INFO: Loading module hooks... 55572 INFO: Loading module hook"hook-PIL.Image.py"... 56546 INFO: Loading module hook"hook-encodings.py"... 56688 INFO: Loading module hook"hook-PIL.SpiderImagePlugin.py"... 56699 INFO: Excluding import 'tkinter' 56704 INFO: Import to be excluded not found: 'FixTk' 56704 INFO: Loading module hook"hook-distutils.py"... 56753 INFO: Loading module hook"hook-certifi.py"... 56755 INFO: Loading module hook"hook-sysconfig.py"... 56792 INFO: Loading module hook"hook-pytz.py"... 56989 INFO: Loading module hook"hook-nltk.py"... 57816 INFO: Loading module hook"hook-pkg_resources.py"... 58813 INFO: Processing pre-safe import module hook win32com 58976 INFO: Loading module hook"hook-PIL.py"... 58988 INFO: Import to be excluded not found: 'FixTk' 58988 INFO: Excluding import 'PySide' 58996 INFO: Removing import of PySide from module PIL.ImageQt 59000 INFO: Excluding import 'PyQt5' 59007 INFO: Removing import of PyQt5 from module PIL.ImageQt 59010 INFO: Excluding import 'PyQt4' 59018 INFO: Removing import of PyQt4 from module PIL.ImageQt 59025 INFO: Excluding import 'tkinter' 59036 INFO: Removing import of tkinter from module PIL.ImageTk 59038 INFO: Loading module hook"hook-xml.py"... 59040 INFO: Loading module hook"hook-pandas.py"... 60447 INFO: Loading module hook"hook-sqlite3.py"... 60607 INFO: Loading module hook"hook-numpy.py"... 60609 INFO: Loading module hook"hook-pycparser.py"... 61578 INFO: Loading module hook"hook-lib2to3.py"... 61616 INFO: Loading module hook"hook-cv2.py"... 61617 INFO: Loading module hook"hook-xml.etree.cElementTree.py"... 61619 INFO: Loading module hook"hook-setuptools.py"... 62934 INFO: Loading module hook"hook-pydoc.py"... 62936 INFO: Loading module hook"hook-numpy.core.py"... 63088 INFO: Looking for ctypes DLLs 63294 WARNING: library user32 required via ctypes not found 63399 INFO: Analyzing run-time hooks ... 63439 INFO: Including run-time hook 'pyi_rth_pkgres.py' 63458 INFO: Including run-time hook 'pyi_rth_nltk.py' 63463 INFO: Including run-time hook 'pyi_rth_multiprocessing.py' 63536 INFO: Looking for dynamic libraries 65726 INFO: Looking for eggs 65727 INFO: Python library not in binary dependencies. Doing additional searching... 65822 INFO: Using Python library /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 65882 INFO: Warnings written to /root/Projects/BIUEngine/src/build/app/warn-app.txt 66237 INFO: Graph cross-reference written to /root/Projects/BIUEngine/src/build/app/xref-app.html 66476 INFO: checking PYZ 66477 INFO: Building PYZ because PYZ-00.toc is non existent 66478 INFO: Building PYZ (ZlibArchive) /root/Projects/BIUEngine/src/build/app/PYZ-00.pyz 70637 INFO: Building PYZ (ZlibArchive) /root/Projects/BIUEngine/src/build/app/PYZ-00.pyz completed successfully. 70722 INFO: checking PKG 70722 INFO: Building PKG because PKG-00.toc is non existent 70722 INFO: Building PKG (CArchive) PKG-00.pkg 70837 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully. 70839 INFO: Bootloader /root/Projects/BIUEngine/lib/python3.6/site-packages/PyInstaller/bootloader/Linux-64bit/run 70840 INFO: checking EXE 70840 INFO: Building EXE because EXE-00.toc is non existent 70840 INFO: Building EXE from EXE-00.toc 70842 INFO: Appending archive to ELF section in EXE /root/Projects/BIUEngine/src/build/app/app 70967 INFO: Building EXE from EXE-00.toc completed successfully. 70981 INFO: checking COLLECT 70982 INFO: Building COLLECT because COLLECT-00.toc is non existent 70983 INFO: Building COLLECT COLLECT-00.toc 82471 INFO: Building COLLECT COLLECT-00.toc completed successfully. |
任何人都可以帮我一样..我可以如何解决这个问题?
可能你的打包可执行文件试图从包外部导入一些框架,并遇到某种版本不匹配。很可能你也在使用像conda或virtualenv这样的虚拟环境?
无法访问机器,很难确定问题。我会尝试以下方法来收集有关该问题的进一步信息:
尝试在另一台没有python或至少没有安装任何numpy的机器上运行你的可执行文件,看看会发生什么。
尝试在只安装了一个numpy版本的计算机上重新打包您的应用程序。
通过在环境中运行
最后一步可以通过推杆来实现
1 2 3 4 | import numpy import numpy print(numpy.__version__) print(numpy.__file__) |
在你的app.py中作为第一行(即在崩溃之前查看输出)
谢谢大家帮忙的人。我也曾在其他地方发布过 - 并且凭着上帝的恩典 - 有人提出了解决方案。它为我解决了。他建议的是 - 我可能会为机器中的各种版本安装2个或更多不同的numpy。一个用于2.7的其他用于3.6等等。他建议我删除其中任何一个并检查是否有问题。它确实有道理 - 所以我提前清理了2.7 / 3.6和其他根据需要为项目手动安装的软件包。发布 - 我刚刚创建了一个虚拟机,并对所需的软件包进行了全新安装(以及numpy)。
另外 - 确保pyinstaller - 在构建时确实将numpy.core.multiarray作为隐藏导入。 (第二步 - 我已经尝试过了)。
说什么 - 事情确实为我锻炼了。它停止向我提供它曾经为此提供的错误。现在正在解决其他问题 - 但这个方法/机制肯定对我有用。
谢谢大家再次帮助我。爱你们。