Я пытаюсь развернуть приложение, но оно вылетает при импорте seaborn
Вот моя конфигурация: Python 2.7, pyinstaller 3.3.1, seaborn 0.8.1.
Вот простейший фрагмент кода для воспроизведения, который я написал в installTest.py
import seaborn
print 'It works now!'
Затем в консоли я набрал pyinstaller .\installTest
Я получаю длинный код ошибки, заканчивающийся тем, что модуль messagesstream
не найден.
У вас есть идеи, как это решить?
Я нашел свою проблему.
Во-первых, вот что заставляет этот небольшой пример работать: я модифицирую свой файл .spec, чтобы включить в него скрытый импорт, а также некоторые панды и вещи морского происхождения.
# -*- mode: python -*-
block_cipher = None
def get_seaborn_path():
import seaborn
seaborn_path = seaborn.__path__[0]
return seaborn_path
def get_pandas_path():
import pandas
pandas_path = pandas.__path__[0]
return pandas_path
a = Analysis(['installTest.py'],
pathex=['C:\\Users\\Admin\\PycharmProjects\\InstalTest'],
binaries=[],
datas=[],
hiddenimports=['scipy._lib.messagestream', 'pandas._libs.tslibs.timedeltas '],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
dict_tree = Tree(get_seaborn_path(), prefix='seaborn', excludes=["*.pyc"])
dict_tree2 = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.datas += dict_tree2
a.binaries = filter(lambda x: 'seaborn' not in x[0], a.binaries)
a.binaries += filter(lambda x: 'pandas' not in x[0], a.binaries)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='installTest',
debug=True,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='installTest')
Вы нашли альтернативы этому подходу? Я создаю свое приложение с помощью fbs, что не позволяет вносить какие-либо изменения в файл спецификации (он автоматически создается во время зависания). Реализация упомянутых двух скрытых операций импорта возможна, но одно это не приводит к созданию функционального бинарного файла.
Для начала было бы полезно показать людям длинную ошибку, которую вы получаете.