我正在运行以下代码:
pyinstaller --onefile main.py
main.py
看起来像:
import sys
import os
sys.path.append(r'C:\Model\Utilities')
from import_pythonpkg import *
......
import_pythonpkg.py
看起来像:
from astroML.density_estimation import EmpiricalDistribution
import calendar
import collections
from collections import Counter, OrderedDict, defaultdict
import csv
....
通过在pyinstaller
上运行main.py
,可以成功创建main.exe
文件。
但是当我运行main.exe
时,它会给astroML
带来错误。如果我从astroML
移动main.py
到import_pythonpkg.py
,则astroML
没有错误。现在我收到了csv
的错误。
即。如果我将main.py
更改为:
import sys
from astroML.density_estimation import EmpiricalDistribution
import os
sys.path.append(r'C:\Model\Utilities')
from import_pythonpkg import *
......
运行astroML
时,main.exe
错误不再存在。
import calendar
中的import_pythonpkg.py
行没有任何错误。
在main.exe
运行后运行pyinstaller
时,我不确定如何处理包的随机错误。
import_pythonpkg
位于r'C:\Model\Utilities'
编辑:
main.exe
的错误看起来如下,即使原始main.py
运行正常。 Pyinstaller甚至能够让我创建main.exe
而不会出错。
Traceback (most recent call last):
File "main.py", line 8, in <module>
File "C:\Model\Utilities\import_pythonpkg.py", line 1, in <module>
from astroML.density_estimation import EmpiricalDistribution
ImportError: No module named astroML.density_estimation
[29180] Failed to execute script main
答案 0 :(得分:1)
我相信PyInstaller没有看到import_pythonpkg
。根据我的经验,当添加到路径或处理外部模块和dll时,PyInstaller不会去搜索它,你必须明确告诉它这样做。它会正确编译为.exe,因为它只是忽略它,但不会运行。运行PyInstaller命令时,请检查是否有关于缺少软件包或模块的警告。
但是如何解决它...如果确实这是问题(我不确定它是什么)你可以试试3件事:
1)将该包移动到您的工作目录中,避免使用sys.path.append
。然后使用PyInstaller进行编译以查看是否有效,那么您就知道问题是pyinstaller无法找到import_pythonpkg
。如果有效,你可以在那里停下来。
2)明确告诉PyInstaller看那里。在使用PyInstaller进行编译时,可以使用hidden-import
标记让它知道(给它完整的路径名)。
--hidden-import=modulename
了解更多信息,请点击此处:How to properly create a pyinstaller hook, or maybe hidden import?
3)如果你使用PyInstaller创建的spec文件,你可以尝试添加一个变量调用pathex
来告诉PyInstaller在那里搜索东西:
block_cipher = None
a = Analysis(['minimal.py'],
pathex=['C:\\Program Files (x86)\\Windows Kits\\10\\example_directory'],
binaries=None,
datas=None,
hiddenimports=['path_to_import', 'path_to_second_import'],
hookspath=None,
runtime_hooks=None,
excludes=None,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,... )
coll = COLLECT(...)
有关规范文件的更多信息:https://pyinstaller.readthedocs.io/en/stable/spec-files.html
(注意你也可以在这里添加hiddenimports)
这个答案也可能有用:PyInstaller - no module named
答案 1 :(得分:0)
即将在您的计算机上丢失的模块。如果您的IDE与您的环境不同,则必须通过pip在设备上加载相同的模块。在CMD屏幕上检查模块并完成缺少的模块。
有时,您必须将设备上的所有IDE装入模块。就我而言,有两个IDE(pycharm和anaconda)。我使用了pycharm,但pyinstaller使用了anaconda的模块,因此我没有安装anaconda并再次尝试。现在就可以了。