Pyinstaller и seaborn

Я пытаюсь развернуть приложение, но оно вылетает при импорте seaborn

Вот моя конфигурация: Python 2.7, pyinstaller 3.3.1, seaborn 0.8.1.

Вот простейший фрагмент кода для воспроизведения, который я написал в installTest.py

import seaborn
print 'It works now!'

Затем в консоли я набрал pyinstaller .\installTest

Я получаю длинный код ошибки, заканчивающийся тем, что модуль messagesstream не найден.

У вас есть идеи, как это решить?

Для начала было бы полезно показать людям длинную ошибку, которую вы получаете.

ImportanceOfBeingErnest 02.05.2018 15:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
553
1

Ответы 1

Я нашел свою проблему.

Во-первых, вот что заставляет этот небольшой пример работать: я модифицирую свой файл .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, что не позволяет вносить какие-либо изменения в файл спецификации (он автоматически создается во время зависания). Реализация упомянутых двух скрытых операций импорта возможна, но одно это не приводит к созданию функционального бинарного файла.

Christian Karcher 06.08.2020 07:21

Другие вопросы по теме