Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.03.2024
Сообщений: 16

Программа работает в VS code, но при упаковке в exe - ошибки

02.11.2024, 17:21. Показов 1529. Ответов 21

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Помогите, пожалуйста, решить проблему. Есть код, который перекладывает данные из одних файлов Excel в другие. Используется для этого pandas и openpyxl. Много папок и файлов, поэтому реализована параллельная работа по ядрам процессора с помощью библиотеки joblib. Также прикручен интерфейс библиотекой tkinter. Если это дело запускаю из среды VS code, как и ожидается появлется меню для работы. Там выбираю папку для обработки, запускаю основную функцию main(). В ней параллельно вызывается функция func, которая и делает все процессы. При этом программа завершается без ошибок и корректно производит все действия. Судя по диспетчеру задач, в самом деле используется все 4 ядра процессора виден процесс Python четыре раза в загрузкой 23% ЦП каждый).

Запаковываю в exe файл с помощью pyinstaller prod_mult.py. Запускаю получившийся exe. Однопоточные процессы протекают нормально, когда программа переходит к параллельному исполнению, внезапно открывается пять копий моего интерфейса и останавливается выполнение. В диспетчере задач при этом уже пять копий процесса prod_mult.exe. Если закрыть любую лишнюю копию интерфейса, в консоль выводится ошибка. Никаких действий с файлами в результате, разумеется, не выполняется.

Ошибка: Не удается найти процесс "39976".
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1892, in __call__
File "f11_prod_mult.py", line 224, in main
File "joblib\parallel.py", line 2007, in __call__
File "joblib\parallel.py", line 1650, in _get_outputs
File "joblib\parallel.py", line 1754, in _retrieve
File "joblib\parallel.py", line 1789, in _raise_error_fast
File "joblib\parallel.py", line 745, in get_result
File "joblib\parallel.py", line 763, in _return_or_raise
joblib.externals.loky.process_executor.T erminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing the Operating System to kill the worker.

Пробовал сжимать с явным указанием специфических библиотек pyinstaller --hidden-import=joblibprod_mult.py и вообще с указанием всех используемых библиотек. Результат тот же. Вспотыкается он о joblib.

В чем может быть причина? Почему через VS code работает без проблем? Версия Питона - 3.9.13. Версия pyinstaller - 6.9.0

Код, к сожалению, полностью не могу привести. Вот его структура:

Python
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
from pathlib import Path
import openpyxl
from openpyxl import load_workbook
import pandas as pd
from joblib import Parallel, delayed
 
import tkinter as tk #модуль для создания пользовательского интерфейса
from tkinter import messagebox, filedialog, Tk, Frame, Button, Text, Scrollbar, Label # Импортируем нужные функции и классы из модуля tkinter
 
#эта фукнция вызывается в параллельных потоках. в каждой папке fil берет данные из нужных файлов и вставляет в один общий, с помощью pandas
def func(spr, mr, fil):
 
    for shab in fil.iterdir():
        if shab.suffix == ".xlsx":
            for key, values in spr.items():
                if shab.name.startswith(values[0]):
 
                    *
                    
#здесь создается итоговое сообщение
def create_result_window():
    
    *
 
    root.mainloop()
 
#фукнция, запускаемая из пользовательского интерфейса, делает все действия
def main():
 
    # Создаем словарь-справочник. Ключи - имена листов, куда будем вставлять данные. Значения - С чего начинается файл, с которго берем данные, 
    # имя листа, с которго берем данные, имя столбца, по которому фильтруем
    spr = {}
 
    #Путь к папке с отчетами - из пользовательского интерфейса
    folder_path = Path(target_folder)
                       
    # Для каждой папки с макрорегионом в директории папки
    for mr in folder_path.iterdir():
        #если это папка...
        if mr.is_dir():
            #создаем список с папками fil в папке mr
            fil_dirs = [fil for fil in mr.iterdir() if fil.is_dir()]
            delayed_calls = [delayed(func)(spr, mr, fil) for fil in fil_dirs]
            results += Parallel(n_jobs=-1)(delayed_calls)
 
    create_result_window()
 
#фукнция для выбора рабочей папки
def choose():
    *
 
# Пользовательский интерфейс
root_i = tk.Tk()
root_i.title("11ф - формирование отчетов (multi). вер. 28.10.2024")
root_i.geometry("800x550")
root_i.configure(bg="alice blue")
root_i.resizable(False, False)
 
*
 
if __name__ == "__main__":
    root_i.mainloop()
Может загвоздка в пресловутом if __name__ == "__main__"?

Добавлено через 8 минут
Вот содержимое файла spec, если для чего-то полезно.

Python
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
# -*- mode: python ; coding: utf-8 -*-
 
 
a = Analysis(
    ['f11_prod_mult.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=['joblib'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)
 
exe = EXE(
    pyz,
    a.scripts,
    [],
    exclude_binaries=True,
    name='f11_prod_mult',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
coll = COLLECT(
    exe,
    a.binaries,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='f11_prod_mult',
)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2024, 17:21
Ответы с готовыми решениями:

Повреждение exe при упаковке или распаковке
Привет! Написал программу, но когда передал её товарищу, оказалось, что она работает неправильно. Долго тестировал, пока не убедился, что...

Установка версии exe при упаковке через PyInstaller
Хочу сделать так, чтобы PyInstaller при сборке проекта прописывал в EXE текущую версию релиза, которая храниться в заданном файле. Создал...

Программа работает некорректно при запуске из *.exe
Появилось весьма интересная проблема: при запуске моей программы из *.exe-файла она работает некорректно (некоторые из используемых флажков...

21
1713 / 580 / 76
Регистрация: 10.04.2009
Сообщений: 9,335
05.11.2024, 10:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от anton78spb Посмотреть сообщение
Если расшарить папку на сервере, где будет лежать софт, для локальных компьютеров пользователей, то можно.
Как расшарить папку?

Создание папки: Сначала создайте папку на сервере, где будет храниться софт.

Настройка прав доступа: Установите права доступа для пользователей или групп, которые будут иметь возможность открывать, изменять или удалять файлы в этой папке.

Общий доступ: Включите общий доступ к папке через настройки операционной системы (например, Windows).

Проверка доступа: Убедитесь, что пользователи могут получить доступ к папке и что права доступа настроены правильно.

Добавлено через 15 минут
нагуглил, но НЕ проверял:
Python
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
import os
import subprocess
 
# Путь к папке
soft_path = r'I:\soft'
 
# Функция для проверки, расшарена ли папка
def is_shared(path):
    try:
        # Выполняем команду PowerShell для проверки расшаривания
        result = subprocess.run(
            ['powershell', '-Command', f"Get-SmbShare | Where-Object {{ $_.Path -eq '{path}' }}"],
            capture_output=True,
            text=True
        )
        # Если результат не пустой, значит папка расшарена
        return bool(result.stdout.strip())
    except Exception as e:
        print(f"Ошибка при проверке: {e}")
        return False
 
# Функция для расшаривания папки
def share_folder(path):
    try:
        # Выполняем команду PowerShell для расшаривания папки
        subprocess.run(
            ['powershell', '-Command', f"New-SmbShare -Name 'SoftShare' -Path '{path}' -FullAccess 'Everyone'"],
            check=True
        )
        print(f"Папка '{path}' успешно расшарена.")
    except subprocess.CalledProcessError as e:
        print(f"Ошибка при расшаривании папки: {e}")
 
# Проверяем, расшарена ли папка
if is_shared(soft_path):
    print(f"Папка '{soft_path}' уже расшарена.")
else:
    print(f"Папка '{soft_path}' не расшарена. Расшариваем...")
    share_folder(soft_path)
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,689
06.11.2024, 15:43
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Докер — это открытая платформа для разработки, доставки и эксплуатации приложений.
Докер не для прикладного ПО для рабочих станций. Он для развёртывания сервисов на серверах. Реже - разработчикам локально какой-нибудь GCC в виде готовой среды сборки развернуть. И не смотря на то, что докер имеет доступ к видюхе, GUI-приложения в нём не живут. Это для задач использующих CUDA.

Так что сюда докер приплетать точно мимо. Да и ставить его всё равно надо, чего ТС не хочет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2024, 15:43

Не работает программа в Heroku, на телефоне работает, в heroku deploy дела, но при запуске крашится. Ошибки не понятные
Скачал у человека с Ютуба прогу, которая в телеге пишет комментарии к сообщениям на канале. В pydrone3 работает нормально, но постоянно в...

Программа телефонный справочник работает, но при выполнении возникают ошибки
Программа телефонный справочник работает, но при выполнении возникают ошибки помогите исправить и составить блок схему программы (Ссылка...

Программа работает при дебаггинге (F5) из студии, но собранный .exe, запущенный отдельно - нет
Проблема в заголовке. Моя программа делает автоматическое копирование сохраняемых на внешний носитель файлов в заранее определённую...

Ошибки вызова стека vs code программа hello world
Вот такие ошибки ntdll.dll!ntdll!LdrInitShimEngineDynamic (Unknown Source:0) ntdll.dll!ntdll!LdrInitShimEngineDynamic (Unknown...

Ошибки explorer.exe и drwtsn32.exe при работе с word и excel файлами
компьютер очень медленно работает, а после открытия word выдает ошибку explorer.exe поcле компьютер зависает, пока не перезагрузишь систему.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru