我正在尝试使用PyInstaller创建应用程序,并且如果我将python库源中的plotly
文件夹复制并粘贴到我的应用程序所在的文件夹中,它将可以正常工作。但是,如果我不这样做,该程序将无法正常工作。
我已经尝试使用隐藏的导入,如下所示在我的.spec
文件中。
# -*- mode: python ; coding: utf-8 -*-
import sys
sys.setrecursionlimit(5000)
block_cipher = None
options = []
a = Analysis(['application.py'],
pathex=['C:\\path_to_application', \
'C:\\path_to_python_libs'],
binaries=[],
datas=[ ('logo.png', '.') ],
hiddenimports=['plotly.offline', 'plotly.graph_objs', 'datetime', 'time'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
options,
[],
exclude_binaries=True,
name='application',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=False,
console=True)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=False,
upx_exclude=[],
name='application')
我收到以下错误(因为尚未创建plotly文件夹):
Traceback (most recent call last):
File "vibration_analysis.py", line 255, in <module>
File "waterfall_FFT2.py", line 249, in waterfall_plot
File "site-packages\plotly\offline\offline.py", line 558, in plot
File "site-packages\plotly\io\_html.py", line 482, in write_html
File "site-packages\plotly\io\_html.py", line 279, in to_html
File "site-packages\plotly\offline\offline.py", line 87, in get_plotlyjs
File "pkgutil.py", line 637, in get_data
File "c:\users\bergon julien\anaconda3\lib\site-packages\PyInstaller\loader\py
imod03_importers.py", line 475, in get_data
with open(path, 'rb') as fp:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\path_to_application\\plotly\\package_data\\plotly.min.js'
答案 0 :(得分:1)
您可以使用add-data
标志将您的App依赖项添加为数据文件。另外,如果要添加整个目录,则可以使用Tree
类。因此,编辑您的规范文件并为Tree
添加ploty
类:
# -*- mode: python ; coding: utf-8 -*-
import sys
sys.setrecursionlimit(5000)
block_cipher = None
options = []
a = Analysis(['application.py'],
...
noarchive=False)
a.datas += Tree('<path_to_ploty_dir>', prefix='./ploty')
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
...
并使用pyinstaller application.spec
生成可执行文件。
答案 1 :(得分:0)
您可以使用py2exe
比PyInstaller
更好,更轻松。 their tutorial和YouTube video的操作方法。